1
0
mirror of https://github.com/DoctorWkt/unix-jun72.git synced 2026-01-11 23:53:34 +00:00
2008-05-02 17:50:21 +00:00

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.