sys comments

This commit is contained in:
Phil Budne
2016-03-31 22:53:27 -04:00
parent 9a8a4bae17
commit 208ed1dbf5
6 changed files with 211 additions and 209 deletions
+4 -4
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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