Merge pull request #145 from philbudne/location7
Improve sys annotations
This commit is contained in:
+21
-17
@@ -6,12 +6,16 @@ orig:
|
||||
hlt " overwritten with interrupt return addr
|
||||
jmp pibreak " dispatch to interrupt processing
|
||||
|
||||
. = orig+7
|
||||
-1 " only ever set (to -1): never read?!
|
||||
. = orig+7 " real time (60Hz) clock
|
||||
-1 " -1 will cause "clock overflow" on next tick
|
||||
" Overflow is checked by "clsf" instr
|
||||
" in PI service (pibreak) routine,
|
||||
" reset to -1 after tick handling
|
||||
" results in an interrupt every "jiffy"
|
||||
|
||||
. = orig+020 " syscall (CAL) and user "interrupt" processing
|
||||
1f " addr for "CAL I": store return here on "CAL"
|
||||
iof " interrupts off
|
||||
iof " here on CAL: interrupts off
|
||||
dac u.ac " save user AC
|
||||
lac 020 " save user return addr
|
||||
dac 1f " save as if "CAL I"
|
||||
@@ -22,29 +26,29 @@ orig:
|
||||
1f " literal to restore location 20
|
||||
1: 0 " "CAL I" PC stored here
|
||||
iof " interrupts off
|
||||
dac u.ac " save user AC
|
||||
dac u.ac " save user AC in user area
|
||||
lacq
|
||||
dac u.mq " save user MQ
|
||||
dac u.mq " save user MQ in user area
|
||||
lac 8
|
||||
dac u.rq " save user auto-index location 8
|
||||
dac u.rq " save user auto-index location 8 in uarea
|
||||
lac 9
|
||||
dac u.rq+1 " save user auto-index location 9
|
||||
jms copy; 10; u.rq+2; 6 " save user auto-index locations 10-15
|
||||
lac 1b " load user PC after system call
|
||||
dac u.rq+8 " save user PC
|
||||
dac u.rq+1 " save auto-index location 9 in user area
|
||||
jms copy; 10; u.rq+2; 6 " save auto-index locations 10-15 (using 8/9!)
|
||||
lac 1b " load user PC
|
||||
dac u.rq+8 " save in user area
|
||||
-1 " load -1
|
||||
dac .savblk " set "save" flag (cleared by disk I/O?)
|
||||
dac .insys " set "in system" flag
|
||||
lac uquant " load user quantum count
|
||||
jms betwen; d0; maxquant " check if between 0 & maxquant??
|
||||
jms swap " no: swap processes
|
||||
lac uquant " load user quantum (tick) count
|
||||
jms betwen; d0; maxquant " check if between 0 & maxquant (30 jiffies)
|
||||
jms swap " no: quantum expired: swap process out
|
||||
ion " interrupts on
|
||||
-1
|
||||
tad u.rq+8 " get address of system call
|
||||
jms laci " load AC indirect??
|
||||
jms betwen; o20001; swn " range check
|
||||
jms laci " load system call instruction
|
||||
jms betwen; o20001; swn " range check (expects CAL I!)
|
||||
jmp badcal " bad system call
|
||||
tad swp " add system call table base
|
||||
tad swp " add "jmp syscall_table_base"
|
||||
dac .+1 " save as next instruction
|
||||
jmp .. i " dispatch system call
|
||||
|
||||
@@ -137,7 +141,7 @@ swp: " system call dispatch table
|
||||
.chdir; .chmod; .chown; badcal; .sysloc; badcal; .capt; .rele
|
||||
.status; badcal; .smes; .rmes; .fork
|
||||
swn:
|
||||
.-swp-1 i " count of system calls, plus indirect!
|
||||
.-swp-1 i " last system call number: "CAL I n"
|
||||
|
||||
" AC/ new value for intflg (non-zero to ignore interrupt char)
|
||||
" sys intrp
|
||||
|
||||
+22
-21
@@ -56,8 +56,7 @@ free: 0
|
||||
jmp free i " Return from the routine
|
||||
t = t+1
|
||||
|
||||
" load AC indirect (without using indirect!)
|
||||
" need to avoid use of indirect in interrupt service routines
|
||||
" "load ac indirect"
|
||||
" AC/ address
|
||||
" jms laci
|
||||
" AC/ contents of address
|
||||
@@ -143,7 +142,7 @@ copyz: 0
|
||||
t = t+1
|
||||
|
||||
" Character queue management routines
|
||||
" (CALLED FROM PI: USE OF INDIRECT AVOIDED!)
|
||||
" (CALLED FROM PI: USE OF INDIRECT AVOIDED TO AVOID DISK DMA UNDERRUN)
|
||||
|
||||
" Queue numbers:
|
||||
" 0: free list
|
||||
@@ -366,42 +365,44 @@ t = t+1
|
||||
|
||||
" perform disk I/O (both filesystem buffer and swapping)
|
||||
" passed physical (BCD) disk address
|
||||
" waits for disk interrupt: no overlapped operation
|
||||
" to avoid disk DMA underrun
|
||||
" called:
|
||||
" jms dsktrans; -WC; MAC; addr_ptr; dsld_ptr
|
||||
" jms dsktrans; -words; mem_addr; disk_addr_ptr; op_ptr_ptr
|
||||
dsktrans: 0
|
||||
-10
|
||||
-10 " set retry counter
|
||||
dac 9f+t
|
||||
1:
|
||||
-1
|
||||
tad dsktrans
|
||||
dac 12
|
||||
tad dsktrans " get arg pointer
|
||||
dac 12 " store as auto-index
|
||||
"** 01-s1.pdf page 26
|
||||
dscs " clear status register
|
||||
lac 12 i
|
||||
lac 12 i " pick up word count
|
||||
dslw " load WC
|
||||
lac 12 i
|
||||
lac 12 i " pick up memory address
|
||||
dslm " load MAC
|
||||
lac 12 i
|
||||
jms laci
|
||||
dsld " load TA & SA
|
||||
dzm .dskb
|
||||
lac 12 i
|
||||
jms laci
|
||||
jms laci
|
||||
dsls " load status
|
||||
lac 12 i " get disk_addr_ptr
|
||||
jms laci " get disk address
|
||||
dsld " load BCD track and sector (TA & SA)
|
||||
dzm .dskb " clear disk interrupt indicator
|
||||
lac 12 i " load status (op) pointer pointer
|
||||
jms laci " fetch pointer
|
||||
jms laci " fetch op
|
||||
dsls " load status register (sets busy, int enb)
|
||||
lac .dskb " check for interrupt
|
||||
sna
|
||||
jmp .-2
|
||||
jmp .-2 " loop until interrupt seen
|
||||
lac .dske " get status from interrupt
|
||||
sma
|
||||
jmp 12 i " return
|
||||
isz 9f+t
|
||||
jmp 1b
|
||||
isz 9f+t " increment retry counter
|
||||
jmp 1b " less than 10 tries: try again
|
||||
jms halt " 10 disk errors
|
||||
t = t+1
|
||||
|
||||
halt: 0
|
||||
isz 9f+t " spin for a while (process interrupts)
|
||||
isz 9f+t " spin for a while (process interrupts?)
|
||||
jmp .-1
|
||||
iof " disable interrupts
|
||||
hlt " halt
|
||||
|
||||
+7
-9
@@ -270,12 +270,10 @@ t = t+3
|
||||
" AC/ file offset
|
||||
" jms iwrite; addr; count
|
||||
|
||||
iwrite: 0
|
||||
iwrite: 0 " set to skp (or nop by iread)
|
||||
dac 9f+t " save arg in t0
|
||||
lac iwrite " load return address
|
||||
|
||||
"** 01-s1.pdf page 38
|
||||
|
||||
dac iread " save as iread return addr
|
||||
lac cskp " load skip instruction
|
||||
dac iwrite " save as iwrite instruction
|
||||
@@ -287,7 +285,7 @@ iwrite: 0
|
||||
iread: 0
|
||||
dac 9f+t " save offset in t0
|
||||
lac cnop " get nop
|
||||
dac iwrite " save as iwrite instruction
|
||||
dac iwrite " save in iwrite return location
|
||||
1: " common code for iread/iwrite
|
||||
-1
|
||||
tad iread i " get word before return addr
|
||||
@@ -322,17 +320,17 @@ iread: 0
|
||||
tad dm1
|
||||
xct iwrite " skip if write
|
||||
jmp .+3
|
||||
dac 10
|
||||
cskp:
|
||||
dac 10 " here on read
|
||||
cskp: " literal for store to iwrite
|
||||
skp
|
||||
dac 11
|
||||
dac 11 " here on write
|
||||
2:
|
||||
lac 11 i
|
||||
dac 10 i
|
||||
isz 9f+t
|
||||
isz 9f+t+1
|
||||
jmp 3f
|
||||
xct iwrite
|
||||
xct iwrite " skip if write
|
||||
jmp 4f
|
||||
lac 9f+t
|
||||
jms betwen; d0; i.size
|
||||
@@ -348,7 +346,7 @@ cskp:
|
||||
and o77
|
||||
sza
|
||||
jmp 2b
|
||||
xct iwrite
|
||||
xct iwrite " skip if write
|
||||
jmp 1b
|
||||
lac 9f+t+3
|
||||
jms dskwr
|
||||
|
||||
+12
-11
@@ -25,23 +25,24 @@ pibreak: " priority interrupt break processing "chain"
|
||||
dac dpwrite " dpwrite = -1
|
||||
jmp piret "** END OF CROSSOUT
|
||||
|
||||
1: clsf " clock overflow (line frequency ticks)?
|
||||
1: clsf " clock overflow (60hz tick increment of loc 7 (-1))
|
||||
jmp 1f " no
|
||||
|
||||
lpb " load display push buttons
|
||||
dac pbsflgs " save
|
||||
isz s.tim+1 " increment low order tick count
|
||||
skp " no overflow, skip second increment
|
||||
skp " no overflow, skip high order word increment
|
||||
isz s.tim " low order overflowed, increment high order count
|
||||
isz uquant " increment user quantum counter
|
||||
"** written: ttydelay -> ttyd1
|
||||
" ("never" skips: 36 bits overflows every 36 years!)
|
||||
isz uquant " increment user quantum counter (ignore overflow)
|
||||
" (18 bits overflows in 72 minutes)
|
||||
"** written: ttydelay -> ttyd1 ;
|
||||
"** written: ttyrestart -> ttyres1
|
||||
|
||||
cnop: " fetched as constant in iread
|
||||
nop
|
||||
cnop: " constant location for iread (stored at iwrite!)
|
||||
nop
|
||||
-1
|
||||
dac 7 " set location 7 to -1 (nothing ever checks/clears it?)
|
||||
clon " enable clock interrupts, reset flag
|
||||
dac 7 " reset rt clock count to -1 (overflow on next tick)
|
||||
clon " enable clock interrupts, clear overflow flag
|
||||
lac ttydelay " tty delay positive?
|
||||
spa " yes: skip to skp
|
||||
isz ttydelay " no: done delaying?
|
||||
@@ -129,7 +130,7 @@ dsprestart:
|
||||
jmp piret " no: done
|
||||
lac sfiles+1 " get ttyout sleep word
|
||||
sma " highest bit set?
|
||||
xor o400000 " no, make it so (why???)
|
||||
xor o400000 " no, make it so
|
||||
dac sfiles+1 " save back
|
||||
|
||||
"** 01-s1.pdf page 43
|
||||
@@ -168,7 +169,7 @@ ttyrestart: 0
|
||||
tad o20 " bump by 16
|
||||
rcr " divide by two
|
||||
cma " complement
|
||||
dac ttydelay " save
|
||||
dac ttydelay " save as delay countdown
|
||||
jmp ttyrestart i
|
||||
2:
|
||||
lac sfiles+1 " run out of characters to send: wake user(s)
|
||||
|
||||
+1
-1
@@ -123,7 +123,7 @@ coldentry:
|
||||
dzm 0100 " not re-entrant
|
||||
caf " clear all flags
|
||||
ion " enable interrupts
|
||||
clon " clear clock flag
|
||||
clon " clear clock overflow flag
|
||||
law 3072 " initialize display....
|
||||
wcga
|
||||
jms dspinit
|
||||
|
||||
Reference in New Issue
Block a user