sys comments
This commit is contained in:
+4
-4
@@ -65,7 +65,7 @@ sysexit: " common system call exit code
|
|||||||
1:
|
1:
|
||||||
dzm .insys " clear "in system call" flag
|
dzm .insys " clear "in system call" flag
|
||||||
jms chkint " pending user interrupt?
|
jms chkint " pending user interrupt?
|
||||||
skp " no
|
skp " no, return to user
|
||||||
jmp .save " yes: dump core
|
jmp .save " yes: dump core
|
||||||
jms copy; u.rq+2; 10; 6 " restore auto-index locations 10-15
|
jms copy; u.rq+2; 10; 6 " restore auto-index locations 10-15
|
||||||
lac u.rq+1 " restore auto-index location 9
|
lac u.rq+1 " restore auto-index location 9
|
||||||
@@ -77,7 +77,7 @@ sysexit: " common system call exit code
|
|||||||
lac u.ac " restore AC register
|
lac u.ac " restore AC register
|
||||||
jmp u.rq+8 i " return to user
|
jmp u.rq+8 i " return to user
|
||||||
|
|
||||||
" scheduler / idle loop
|
" scheduler / swapper / idle loop
|
||||||
swap: 0
|
swap: 0
|
||||||
ion
|
ion
|
||||||
1:
|
1:
|
||||||
@@ -176,8 +176,8 @@ locn:
|
|||||||
" call:
|
" call:
|
||||||
" .insys/ 0
|
" .insys/ 0
|
||||||
" jms chkint
|
" jms chkint
|
||||||
" no: no interrupt, or intflg set (discards interrupt)
|
" <already ".insys", no interrupt, or intflg set (ignore interrupt)>
|
||||||
" yes: PI off, .insys set
|
" <found user interrupt: PI off, .insys set>
|
||||||
chkint: 0
|
chkint: 0
|
||||||
lac .insys
|
lac .insys
|
||||||
sza " in system?
|
sza " in system?
|
||||||
|
|||||||
+1
-1
@@ -216,7 +216,7 @@
|
|||||||
sza " zero (read)
|
sza " zero (read)
|
||||||
lac d1 " no: get write mode bit
|
lac d1 " no: get write mode bit
|
||||||
sna " non-zero (write)?
|
sna " non-zero (write)?
|
||||||
lac d2 " no: get read mode bot
|
lac d2 " no: get read mode bit
|
||||||
dac mode " save for access call
|
dac mode " save for access call
|
||||||
lac u.cdir " get current working directory
|
lac u.cdir " get current working directory
|
||||||
jms namei; 0:0 " search for file
|
jms namei; 0:0 " search for file
|
||||||
|
|||||||
+3
-3
@@ -330,9 +330,9 @@ rppti:
|
|||||||
jmp .+3
|
jmp .+3
|
||||||
alss 9
|
alss 9
|
||||||
jmp passone
|
jmp passone
|
||||||
lac sfiles+3
|
lac sfiles+3 " get sleep word
|
||||||
sma
|
sma " high bit set?
|
||||||
rsa
|
rsa " no: reader select alphanumeric mode
|
||||||
1:
|
1:
|
||||||
jms sleep; sfiles+3
|
jms sleep; sfiles+3
|
||||||
jms swap
|
jms swap
|
||||||
|
|||||||
+4
-4
@@ -248,13 +248,13 @@ dspinit: 0
|
|||||||
jmp dspinit i
|
jmp dspinit i
|
||||||
|
|
||||||
" "move display" (change display buffer pointer)
|
" "move display" (change display buffer pointer)
|
||||||
" called with new buffer pointer in AC??
|
" called with new buffer pointer in AC
|
||||||
movdsp: 0
|
movdsp: 0
|
||||||
iof
|
iof
|
||||||
cdf
|
cdf " clear display flags (stop)
|
||||||
dac dspbufp
|
dac dspbufp " save display buf pointer
|
||||||
-1
|
-1
|
||||||
dac .dspb
|
dac .dspb " .dspb = -1
|
||||||
ion
|
ion
|
||||||
jmp movdsp i
|
jmp movdsp i
|
||||||
|
|
||||||
|
|||||||
+192
-191
@@ -1,28 +1,28 @@
|
|||||||
"** 01-s1.pdf page 41
|
"** 01-s1.pdf page 41
|
||||||
" s7
|
" s7
|
||||||
|
|
||||||
pibreak: " priority interrupt break processing "chain"
|
pibreak: " priority interrupt break processing "chain"
|
||||||
dac .ac " save interrupt AC
|
dac .ac " save interrupt AC
|
||||||
"** CROSSED OUT....
|
"** CROSSED OUT....
|
||||||
dpsf
|
dpsf " skip on data phone flag set
|
||||||
jmp 1f " disable the Graphics-2 I/O
|
jmp 1f " not set: check next device
|
||||||
|
|
||||||
dpcf
|
dpcf " clear dataphone flag
|
||||||
dprs
|
dprs " read dataphone status
|
||||||
dac dpstat
|
dac dpstat " save for user
|
||||||
sma ral
|
sma ral " REC FLG set? rotate flags left
|
||||||
jmp 2f
|
jmp 2f " no
|
||||||
dprc
|
dprc " read char (bit zero set if parity correct)
|
||||||
dac dpchar
|
dac dpchar " save for user
|
||||||
-1
|
-1
|
||||||
dac dpread
|
dac dpread " dpread = -1
|
||||||
lac dpstat
|
lac dpstat " get status back
|
||||||
ral
|
ral " rotate up
|
||||||
2:
|
2:
|
||||||
sma
|
sma " XMIT FLG set?
|
||||||
jmp piret
|
jmp piret " no: return from interrupt
|
||||||
-1
|
-1
|
||||||
dac dpwrite
|
dac dpwrite " dpwrite = -1
|
||||||
jmp piret "** END OF CROSSOUT
|
jmp piret "** END OF CROSSOUT
|
||||||
|
|
||||||
1: clsf " clock overflow (line frequency ticks)?
|
1: clsf " clock overflow (line frequency ticks)?
|
||||||
@@ -40,7 +40,7 @@ pibreak: " priority interrupt break processing "chain"
|
|||||||
cnop: " fetched as constant in iread
|
cnop: " fetched as constant in iread
|
||||||
nop
|
nop
|
||||||
-1
|
-1
|
||||||
dac 7 " set location 7 to -1 (nothing ever clears it)
|
dac 7 " set location 7 to -1 (nothing ever checks/clears it?)
|
||||||
clon " enable clock interrupts, reset flag
|
clon " enable clock interrupts, reset flag
|
||||||
lac ttydelay " tty delay positive?
|
lac ttydelay " tty delay positive?
|
||||||
spa " yes: skip to skp
|
spa " yes: skip to skp
|
||||||
@@ -49,141 +49,142 @@ cnop: " fetched as constant in iread
|
|||||||
jms ttyrestart " yes: start output
|
jms ttyrestart " yes: start output
|
||||||
"** START CROSSED OUT: written: lac tty
|
"** START CROSSED OUT: written: lac tty
|
||||||
lac .dspb
|
lac .dspb
|
||||||
sna
|
sna " .dspb != 0?
|
||||||
jmp piret
|
jmp piret " no: return
|
||||||
isz .dsptm
|
isz .dsptm " increment .dsptm; is zero?
|
||||||
skp
|
skp " no
|
||||||
jmp dsprestart
|
jmp dsprestart " yes: restart display
|
||||||
sad d3
|
sad d3 " .dspb == 3?
|
||||||
jmp piret
|
jmp piret " yes: return
|
||||||
isz .dspb
|
isz .dspb " increment .dspb; is zero?
|
||||||
jmp piret
|
jmp piret " no: return from interrupt
|
||||||
jmp dsprestart "** END CROSSED OUT
|
jmp dsprestart " yes: restart display
|
||||||
|
"** END CROSSED OUT
|
||||||
|
|
||||||
1: dssf " disk flag set?
|
1: dssf " disk flag set?
|
||||||
jmp 1f " no
|
jmp 1f " no
|
||||||
|
|
||||||
-1 " set .dskb = -1
|
-1 " set .dskb = -1
|
||||||
dac .dskb
|
dac .dskb
|
||||||
|
|
||||||
"** 01-s1.pdf page 42
|
"** 01-s1.pdf page 42
|
||||||
|
|
||||||
dsrs " get disk status in .dske
|
dsrs " get disk status in .dske
|
||||||
dac .dske
|
dac .dske
|
||||||
dscs " clear status register
|
dscs " clear status register
|
||||||
jmp piret
|
jmp piret
|
||||||
|
|
||||||
"** BEGIN CROSSED OUT
|
"** BEGIN CROSSED OUT
|
||||||
1: lds " load display status (see 03-scope.pdf pg 25)
|
1: lds " load display status (see 03-scope.pdf pg 25)
|
||||||
sma ral " display trap set? (and rotate left)
|
sma ral " display trap set? (and rotate left)
|
||||||
jmp 1f " not set
|
jmp 1f " not set
|
||||||
cdf " display done executing; clear display flags
|
cdf " display done executing; clear display flags
|
||||||
lac .dspb
|
lac .dspb
|
||||||
sna
|
sna
|
||||||
jmp piret " return now if .dspb == 0
|
jmp piret " return now if .dspb == 0
|
||||||
tad dm3
|
tad dm3
|
||||||
sna
|
sna
|
||||||
jmp dsprestart " start display if .dspb == 3
|
jmp dsprestart " start display if .dspb == 3
|
||||||
dac .dspb " otherwise, .dspb -= 3 and return
|
dac .dspb " otherwise, .dspb -= 3 and return
|
||||||
jmp piret
|
jmp piret
|
||||||
dsprestart:
|
dsprestart:
|
||||||
lac d1
|
lac d1
|
||||||
dac .dspb " set .dspb = 1
|
dac .dspb " set .dspb = 1
|
||||||
lac dspbufp " load display buf pointer
|
lac dspbufp " load display buf pointer
|
||||||
beg " start display processor
|
beg " start display processor
|
||||||
-10
|
-10
|
||||||
dac .dsptm " set .dsptm = -10 (10 ticks)
|
dac .dsptm " set .dsptm = -10 (10 ticks)
|
||||||
jmp piret
|
jmp piret
|
||||||
|
|
||||||
1: sma ral " edges flag set?? (and rotate)
|
1: sma ral " edges flag set?? (and rotate)
|
||||||
jmp .+3 " no
|
jmp .+3 " no
|
||||||
raef " "resume after edges flag"
|
raef " "resume after edges flag"
|
||||||
jmp piret " return
|
jmp piret " return
|
||||||
sma " light pen flag?
|
sma " light pen flag?
|
||||||
jmp 1f " no
|
jmp 1f " no
|
||||||
lda " G-2: load display address
|
lda " G-2: load display address
|
||||||
dac .lpba " save
|
dac .lpba " save
|
||||||
rlpd " G-2: resume after light pen stop
|
rlpd " G-2: resume after light pen stop
|
||||||
jmp piret
|
jmp piret
|
||||||
|
|
||||||
1: ksf " (TTY) keyboard flag set?
|
1: ksf " (TTY) keyboard flag set?
|
||||||
jmp 1f " no
|
jmp 1f " no
|
||||||
|
|
||||||
lac ttydelay " get TTY delay
|
lac ttydelay " get TTY delay
|
||||||
sma " minus (waiting for output)?
|
sma " minus (waiting for output)?
|
||||||
isz ttydelay " no: increment??? (make more positive)
|
isz ttydelay " no: increment??? (make more positive)
|
||||||
krb " read keyboard buffer
|
krb " read keyboard buffer
|
||||||
dac char " save in char
|
dac char " save in char
|
||||||
sad o375 " interrupt char (TTY ALT MODE?)
|
sad o375 " interrupt char (TTY ALT MODE?)
|
||||||
jmp intrp1 " yes
|
jmp intrp1 " yes
|
||||||
lac d1
|
lac d1
|
||||||
jms putchar
|
jms putchar
|
||||||
dzm char
|
dzm char
|
||||||
lac sfiles+0 " get sleep word for ttyin
|
lac sfiles+0 " get sleep word for ttyin
|
||||||
jms wakeup " wake processes
|
jms wakeup " wake processes
|
||||||
dac sfiles+0 " clear sleep word
|
dac sfiles+0 " clear sleep word
|
||||||
lac char " get character
|
lac char " get character
|
||||||
sad o212 " new line (with parity)??
|
sad o212 " new line (with parity)??
|
||||||
skp " yes
|
skp " yes
|
||||||
jmp piret " no: done
|
jmp piret " no: done
|
||||||
lac sfiles+1 " get ttyout sleep word
|
lac sfiles+1 " get ttyout sleep word
|
||||||
sma " highest bit set?
|
sma " highest bit set?
|
||||||
xor o400000 " no, make it so (why???)
|
xor o400000 " no, make it so (why???)
|
||||||
dac sfiles+1 " save back
|
dac sfiles+1 " save back
|
||||||
|
|
||||||
"** 01-s1.pdf page 43
|
"** 01-s1.pdf page 43
|
||||||
|
|
||||||
jms putcr " output CR next
|
jms putcr " output CR next
|
||||||
jms ttyrestart " start output
|
jms ttyrestart " start output
|
||||||
jmp piret
|
jmp piret
|
||||||
|
|
||||||
1: tsf " TTY output flag set?
|
1: tsf " TTY output flag set?
|
||||||
jmp 1f " no
|
jmp 1f " no
|
||||||
|
|
||||||
tcf " yes: clear flag
|
tcf " yes: clear flag
|
||||||
jms ttyrestart " transmit next character
|
jms ttyrestart " transmit next character
|
||||||
jmp piret
|
jmp piret
|
||||||
|
|
||||||
ttyrestart: 0
|
ttyrestart: 0
|
||||||
lac ttydelay " get tty delay
|
lac ttydelay " get tty delay
|
||||||
spa " positive?
|
spa " positive?
|
||||||
jmp ttyrestart i " no: keep waiting
|
jmp ttyrestart i " no: keep waiting
|
||||||
lac nttychar " get pending CR, if any
|
lac nttychar " get pending CR, if any
|
||||||
dzm nttychar " clear it
|
dzm nttychar " clear it
|
||||||
sza " need to send CR?
|
sza " need to send CR?
|
||||||
jmp 3f " yes
|
jmp 3f " yes
|
||||||
isz ttydelay " increment ttydelay (make more positive)
|
isz ttydelay " increment ttydelay (make more positive)
|
||||||
lac d2
|
lac d2
|
||||||
jms getchar " get a character
|
jms getchar " get a character
|
||||||
jmp 2f " none found??
|
jmp 2f " none found??
|
||||||
3:
|
3:
|
||||||
tls " start output
|
tls " start output
|
||||||
sad o12 " newline?
|
sad o12 " newline?
|
||||||
jms putcr " yes: put CR next
|
jms putcr " yes: put CR next
|
||||||
sad o15 " CR?
|
sad o15 " CR?
|
||||||
skp " yes
|
skp " yes
|
||||||
jmp ttyrestart i " no: return
|
jmp ttyrestart i " no: return
|
||||||
lac ttydelay " get current tty delay
|
lac ttydelay " get current tty delay
|
||||||
tad o20 " bump by 16
|
tad o20 " bump by 16
|
||||||
rcr " divide by two
|
rcr " divide by two
|
||||||
cma " complement
|
cma " complement
|
||||||
dac ttydelay " save
|
dac ttydelay " save
|
||||||
jmp ttyrestart i
|
jmp ttyrestart i
|
||||||
2:
|
2:
|
||||||
lac sfiles+1 " run out of characters to send: wake user(s)
|
lac sfiles+1 " run out of characters to send: wake user(s)
|
||||||
jms wakeup
|
jms wakeup
|
||||||
dac sfiles+1
|
dac sfiles+1
|
||||||
jmp ttyrestart i "** written arrow up 2 copies
|
jmp ttyrestart i "** written arrow up 2 copies
|
||||||
|
|
||||||
"** BEGIN CROSSED OUT
|
"** BEGIN CROSSED OUT
|
||||||
1: sck " Graphic-2 keyboard flag set?
|
1: sck " Graphic-2 keyboard flag set?
|
||||||
jmp 1f " no.
|
jmp 1f " no.
|
||||||
|
|
||||||
cck " yes: clear flag
|
cck " yes: clear flag
|
||||||
lck " read character
|
lck " read character
|
||||||
dac char
|
dac char
|
||||||
sad o33 " code 33 (ESCAPE?)
|
sad o33 " code 33 (ESCAPE?)
|
||||||
jmp intrp2 " yes: mark interrupt
|
jmp intrp2 " yes: mark interrupt
|
||||||
lac d3
|
lac d3
|
||||||
jms putchar
|
jms putchar
|
||||||
nop
|
nop
|
||||||
@@ -192,21 +193,21 @@ ttyrestart: 0
|
|||||||
dac sfiles+2
|
dac sfiles+2
|
||||||
jmp piret
|
jmp piret
|
||||||
|
|
||||||
1: rsf " paper tape ready?
|
1: rsf " paper tape reader ready?
|
||||||
jmp 1f " no
|
jmp 1f " no
|
||||||
|
|
||||||
|
|
||||||
"** 01-s1.pdf page 44
|
"** 01-s1.pdf page 44
|
||||||
|
|
||||||
lac npptchar
|
lac npptchar
|
||||||
sna
|
sna " have saved char?
|
||||||
jmp .+5
|
jmp .+5 " no: jump to second rrb
|
||||||
dac char
|
dac char " yes: save as current char
|
||||||
rrb
|
rrb " clear flag, read reader buffer
|
||||||
dac npptchar
|
dac npptchar " save as saved char
|
||||||
jmp .+3
|
jmp .+3
|
||||||
rrb
|
rrb " here without saved char: read new
|
||||||
dac char
|
dac char " save as current
|
||||||
3:
|
3:
|
||||||
lac char
|
lac char
|
||||||
sna
|
sna
|
||||||
@@ -218,16 +219,16 @@ ttyrestart: 0
|
|||||||
sad d4
|
sad d4
|
||||||
jmp 4f
|
jmp 4f
|
||||||
2:
|
2:
|
||||||
lac npptchar
|
lac npptchar " get saved char (if any)
|
||||||
sna
|
sna " had saved char?
|
||||||
jmp .+4
|
jmp .+4 " no: wake up writer
|
||||||
dac char
|
dac char " yes: save as char to send
|
||||||
dzm npptchar
|
dzm npptchar " clear saved char
|
||||||
jmp 3b
|
jmp 3b
|
||||||
rsa
|
rsa " reader select alphanumeric mode
|
||||||
lac sfiles+3
|
lac sfiles+3
|
||||||
jms wakeup
|
jms wakeup " wake sleepers; returns zero
|
||||||
xor o400000
|
xor o400000 " set high bit (rsa before sleep)
|
||||||
dac sfiles+3
|
dac sfiles+3
|
||||||
jmp piret
|
jmp piret
|
||||||
3:
|
3:
|
||||||
@@ -239,43 +240,43 @@ ttyrestart: 0
|
|||||||
dac sfiles+3
|
dac sfiles+3
|
||||||
jmp piret
|
jmp piret
|
||||||
|
|
||||||
1: psf " paper tape ready?
|
1: psf " paper tape punch ready?
|
||||||
jmp 1f " no
|
jmp 1f " no
|
||||||
|
|
||||||
pcf " clear ptp flag
|
pcf " clear ptp flag
|
||||||
lac d5
|
lac d5
|
||||||
jms getchar " get next char
|
jms getchar " get next char
|
||||||
jmp .+3
|
jmp .+3 " none: wake sleepers
|
||||||
psa
|
psa " punch set alphanumeric mode
|
||||||
jmp piret
|
jmp piret " return from interrupt
|
||||||
lac sfiles+4
|
lac sfiles+4 " get sleeper bit vector
|
||||||
jms wakeup
|
jms wakeup " wake them
|
||||||
dac sfiles+4
|
dac sfiles+4 " store zero
|
||||||
jmp piret
|
jmp piret " return from PI
|
||||||
|
|
||||||
"** BEGIN CROSSED OUT
|
"** BEGIN CROSSED OUT
|
||||||
1: spb " any graphic-2 push button?
|
1: spb " any graphic-2 push button?
|
||||||
jmp 1f " no
|
jmp 1f " no
|
||||||
|
|
||||||
cpb " clear push button flag
|
cpb " clear push button flag
|
||||||
lpb " load push button value
|
lpb " load push button value
|
||||||
dac pbsflgs+1
|
dac pbsflgs+1
|
||||||
|
|
||||||
"** 01-s1.pdf page 45
|
"** 01-s1.pdf page 45
|
||||||
|
|
||||||
and o2000 " get push button 7
|
and o2000 " get push button 7
|
||||||
sna " set?
|
sna " set?
|
||||||
jmp piret " no: done
|
jmp piret " no: done
|
||||||
jms dspinit " yes: reset display buffer
|
jms dspinit " yes: reset display buffer
|
||||||
lac sfiles+6 " wake up anyone sleeping on display
|
lac sfiles+6 " wake up anyone sleeping on display
|
||||||
jms wakeup
|
jms wakeup
|
||||||
dac sfiles+6
|
dac sfiles+6
|
||||||
cla " clear button lights
|
cla " clear button lights
|
||||||
wbl
|
wbl
|
||||||
jmp piret "** END CROSSED OUT
|
jmp piret "** END CROSSED OUT
|
||||||
|
|
||||||
1: crsf " card reader flag set?
|
1: crsf " card reader flag set?
|
||||||
jmp 1f " no
|
jmp 1f " no
|
||||||
|
|
||||||
crrb
|
crrb
|
||||||
dac crchar
|
dac crchar
|
||||||
@@ -283,14 +284,14 @@ ttyrestart: 0
|
|||||||
dac crread
|
dac crread
|
||||||
jmp piret
|
jmp piret
|
||||||
|
|
||||||
1: crrb " read card reader buffer??
|
1: crrb " read card reader buffer??
|
||||||
|
|
||||||
piret: " return from priority interrupt
|
piret: " return from priority interrupt
|
||||||
lac 0 " get LINK/PC
|
lac 0 " get LINK (in bit 0)
|
||||||
ral " restore LINK
|
ral " restore LINK
|
||||||
lac .ac " restore AC
|
lac .ac " restore AC
|
||||||
ion " reenable interrupts
|
ion " reenable interrupts
|
||||||
jmp 0 i " return from interrupt
|
jmp 0 i " return from interrupt
|
||||||
|
|
||||||
" wake sleeping processes
|
" wake sleeping processes
|
||||||
" NOTE!! Called from interrupt service, so avoids indirect!!!
|
" NOTE!! Called from interrupt service, so avoids indirect!!!
|
||||||
@@ -299,35 +300,35 @@ piret: " return from priority interrupt
|
|||||||
" jms wakeup
|
" jms wakeup
|
||||||
" AC/ 0 (to store in sfiles word)
|
" AC/ 0 (to store in sfiles word)
|
||||||
wakeup: 0
|
wakeup: 0
|
||||||
dac 9f+t " save vector in t0
|
dac 9f+t " save vector in t0
|
||||||
-mnproc
|
-mnproc
|
||||||
dac 9f+t+1 " loop count in t1
|
dac 9f+t+1 " loop count in t1
|
||||||
lac tadu " get "tad ulist"
|
lac tadu " get "tad ulist"
|
||||||
dac 2f
|
dac 2f
|
||||||
lac dacu " get "dac ulist"
|
lac dacu " get "dac ulist"
|
||||||
dac 2f+1
|
dac 2f+1
|
||||||
1:
|
1:
|
||||||
lac 9f+t
|
lac 9f+t
|
||||||
ral " rotate vector up one
|
ral " rotate vector up one
|
||||||
dac 9f+t
|
dac 9f+t
|
||||||
sma " high bit set?
|
sma " high bit set?
|
||||||
jmp 2f+2 " no: skip the fun
|
jmp 2f+2 " no: skip the fun
|
||||||
lac o700000 " yes: decrement process status (wake)
|
lac o700000 " yes: decrement process status (wake)
|
||||||
2: tad .. " (avoiding indirect)
|
2: tad .. " (avoiding indirect)
|
||||||
dac ..
|
dac ..
|
||||||
lac 2b " advance tad operand by 4 words
|
lac 2b " advance tad operand by 4 words
|
||||||
tad d4
|
tad d4
|
||||||
dac 2b
|
dac 2b
|
||||||
lac 2b+1 " advance tad operand by 4 words
|
lac 2b+1 " advance tad operand by 4 words
|
||||||
tad d4
|
tad d4
|
||||||
dac 2b+1
|
dac 2b+1
|
||||||
isz 9f+t+1 " done?
|
isz 9f+t+1 " done?
|
||||||
jmp 1b " no, keep going
|
jmp 1b " no, keep going
|
||||||
cla " return zero in AC
|
cla " return zero in AC
|
||||||
jmp wakeup i
|
jmp wakeup i
|
||||||
t = t+2
|
t = t+2
|
||||||
|
|
||||||
" call to output CR after LF (NL)
|
" call to output CR after LF (NL) on TTY
|
||||||
putcr: 0
|
putcr: 0
|
||||||
lac o15
|
lac o15
|
||||||
dac nttychar
|
dac nttychar
|
||||||
@@ -337,43 +338,43 @@ putcr: 0
|
|||||||
cla
|
cla
|
||||||
jmp putcr i
|
jmp putcr i
|
||||||
|
|
||||||
intrp1: " here with TTY interrupt character
|
intrp1: " here with TTY interrupt character
|
||||||
lac d6 " get keyboard special device number
|
lac d6 " get keyboard special device number
|
||||||
dac .int1 " save as interrupt source
|
dac .int1 " save as interrupt source
|
||||||
lac d1 " drain tty input buffer?
|
lac d1 " drain tty input buffer?
|
||||||
jms getchar
|
jms getchar
|
||||||
skp
|
skp
|
||||||
jmp .-3
|
jmp .-3
|
||||||
lac d2 " drain tty output buffer?
|
lac d2 " drain tty output buffer?
|
||||||
jms getchar
|
jms getchar
|
||||||
skp
|
skp
|
||||||
jmp .-3
|
jmp .-3
|
||||||
lac sfiles+0 " wake ttyin sleepers
|
lac sfiles+0 " wake ttyin sleepers
|
||||||
jms wakeup
|
jms wakeup
|
||||||
dac sfiles+0
|
dac sfiles+0
|
||||||
lac sfiles+1 " wake ttyout sleepers
|
lac sfiles+1 " wake ttyout sleepers
|
||||||
jms wakeup
|
jms wakeup
|
||||||
dac sfiles+1
|
dac sfiles+1
|
||||||
jms chkint " check if user interrupted
|
jms chkint " check if user interrupted
|
||||||
jmp piret " no, return from PI
|
jmp piret " no, return from PI
|
||||||
jmp 1f " yes: return thru system call code (dump core)
|
jmp 1f " yes: return thru system call code (dump core)
|
||||||
intrp2: " here with display interrupt character
|
intrp2: " here with display interrupt character
|
||||||
lac d7 " get keyboard special device number
|
lac d7 " get keyboard special device number
|
||||||
dac .int2 " save as interrupt source
|
dac .int2 " save as interrupt source
|
||||||
lac d3 " drain keyboard buffer?
|
lac d3 " drain keyboard buffer?
|
||||||
jms getchar
|
jms getchar
|
||||||
skp
|
skp
|
||||||
jmp .-3
|
jmp .-3
|
||||||
lac sfiles+2 " wake up any "keyboard" sleepers
|
lac sfiles+2 " wake up any "keyboard" sleepers
|
||||||
jms wakeup
|
jms wakeup
|
||||||
dac sfiles+2
|
dac sfiles+2
|
||||||
lac sfiles+6 " wake up any "display" sleepers
|
lac sfiles+6 " wake up any "display" sleepers
|
||||||
jms wakeup
|
jms wakeup
|
||||||
dac sfiles+6
|
dac sfiles+6
|
||||||
jms chkint " check if user interrupted
|
jms chkint " check if user interrupted
|
||||||
jmp piret " no, return from PI
|
jmp piret " no, return from PI
|
||||||
1:
|
1:
|
||||||
lac 0 " get interrupt PC
|
lac 0 " get interrupt PC
|
||||||
dac 020 " save as system call return PC
|
dac 020 " save as system call return PC
|
||||||
lac .ac " restore AC from interrupt
|
lac .ac " restore AC from interrupt
|
||||||
jmp 021 " join system call processing (dump core?)
|
jmp 021 " join system call processing (dump core?)
|
||||||
|
|||||||
+7
-6
@@ -117,6 +117,7 @@ dspbuf:
|
|||||||
" X-Y: invisible, no delay, Y=01740 (992)
|
" X-Y: invisible, no delay, Y=01740 (992)
|
||||||
" X-Y: invisible, settling delay, X=0
|
" X-Y: invisible, settling delay, X=0
|
||||||
.=.+30
|
.=.+30
|
||||||
|
" Kernel startup (reused for display buffer)
|
||||||
coldentry:
|
coldentry:
|
||||||
dzm 0100 " not re-entrant
|
dzm 0100 " not re-entrant
|
||||||
caf " clear all flags
|
caf " clear all flags
|
||||||
@@ -145,14 +146,14 @@ edskbsp: .
|
|||||||
uquant: .=.+1 " number of ticks user has been running
|
uquant: .=.+1 " number of ticks user has been running
|
||||||
dspbufp: .=.+1 " pointer to display buffer
|
dspbufp: .=.+1 " pointer to display buffer
|
||||||
pbsflgs: .=.+2 " buttons on last tick, last button interrupt
|
pbsflgs: .=.+2 " buttons on last tick, last button interrupt
|
||||||
mode: .=.+1
|
mode: .=.+1 " user access mode: 1 for write, 2 for read
|
||||||
nttychar: .=.+1 " CR to send next, or zero
|
nttychar: .=.+1 " CR to send next, or zero
|
||||||
npptchar: .=.+1
|
npptchar: .=.+1 " saved PTR char
|
||||||
ttydelay: .=.+1 " delay count for TTY output
|
ttydelay: .=.+1 " delay count for TTY output
|
||||||
name: .=.+4
|
name: .=.+4 " file name for current sys call
|
||||||
lnkaddr: .=.+1
|
lnkaddr: .=.+1 " temp for character queue routines
|
||||||
char: .=.+1
|
char: .=.+1 " current char: temp for PI
|
||||||
dskaddr: .=.+1
|
dskaddr: .=.+1 " number of block in dskbuf
|
||||||
uniqpid: 1 " pid generator
|
uniqpid: 1 " pid generator
|
||||||
lu: .=.+4 " user (process) table entry copy
|
lu: .=.+4 " user (process) table entry copy
|
||||||
sfiles: .=.+10 " wait addresses for special files
|
sfiles: .=.+10 " wait addresses for special files
|
||||||
|
|||||||
Reference in New Issue
Block a user