mirror of
https://github.com/DoctorWkt/unix-jun72.git
synced 2026-01-11 23:53:34 +00:00
56 lines
2.1 KiB
Plaintext
56 lines
2.1 KiB
Plaintext
1:
|
|
bit $22000,(r5) / check bits 10, 13 (read, waiting to read)
|
|
/ of I/O queue entry
|
|
beq 1f / branch if 10, 13 zero (i.e., not reading, or waiting
|
|
/ to read)
|
|
jsr r0,idle; s.wait+2 / if buffer is reading or writing to read,
|
|
/ idle
|
|
br 1b / till finished
|
|
1:
|
|
bis $101000,(r5) / set bits 9, 15 in 1st word of I/O queue
|
|
/ (write, inhibit bits)
|
|
clr *$ps / clear processor status
|
|
add $8,r5 / r5 points to first word in data area for this
|
|
/ block
|
|
rts r0
|
|
|
|
dskwr:
|
|
bic $100000,*bufp / clear bit 15 of I/O queue entry at
|
|
/ bottom of queue
|
|
|
|
ppoke:
|
|
mov $340,*$ps
|
|
jsr r0,poke
|
|
clr *$ps
|
|
rts r0
|
|
poke:
|
|
mov r1,-(sp)
|
|
mov r2,-(sp)
|
|
mov r3,-(sp)
|
|
mov $bufp+nbuf+nbuf+6,r2 / r2 points to highest priority I/O
|
|
/ queue pointer
|
|
1:
|
|
mov -(r2),r1 / r1 points to an I/O queue entry
|
|
bit $3000,(r1) / test bits 9 and 10 of word 1 of I/O queue
|
|
/ entry
|
|
beq 2f / branch to 2f if both are clear
|
|
bit $130000,(r1) / test bits 12, 13, and 15
|
|
bne 2f / branch if any are set
|
|
movb (r1),r3 / get device id
|
|
tstb deverr(r3) / test for errors on this device
|
|
beq 3f / branch if no errors
|
|
mov $-1,2(r1) / destroy associativity
|
|
clrb 1(r1) / do not do I/O
|
|
br 2f
|
|
3:
|
|
cmpb r3,$1 / device id = 1; device is disk
|
|
blt prf / device id = 0; device is drum
|
|
bgt ptc / device id greater than or equal to 1; device is
|
|
/ dec tape
|
|
bit $2,active / test disk busy bit
|
|
bne 2f / branch if bit is set
|
|
bis $2,active / set disk busy bit
|
|
mov r1,rkap / rkap points to current I/O queue entry for disk
|
|
mov 2(r1),mq / put physical block number in mq
|
|
mov $12.,div / divide physical block number by 12.
|