mirror of
https://github.com/DoctorWkt/unix-jun72.git
synced 2026-02-01 22:43:27 +00:00
56 lines
1.8 KiB
Plaintext
56 lines
1.8 KiB
Plaintext
mov (sp)+,r0 / return to routine that called writei
|
|
jmp ret
|
|
tstdeve: / check whether permanent error has occured on special file
|
|
/ I/O
|
|
mov cdev,r1 / only works on tape; r1 has device #
|
|
tstb deverr(r1) / test error bit of device
|
|
bne 1f / error
|
|
rts r0 / device okay
|
|
1:
|
|
clrb deverr(r1) / clear error
|
|
|
|
error10:
|
|
jmp error / see 'error' routine
|
|
|
|
dioreg:
|
|
mov u.count,r3 / move char count to r3
|
|
cmp r3,$512. / more than 512. char?
|
|
blos 1f / no, branch
|
|
mov $512.,r3 / yes, just take 512.
|
|
1:
|
|
mov u.base,r2 / put users base in r2
|
|
add r3,u.nread / add the number to be read to u.nread
|
|
sub r3,u.count / update count
|
|
add r3,u.base / update base
|
|
rts r0 / return
|
|
|
|
preread:
|
|
jsr r0,bufaloc / get a free I/O buffer (r1 has block number)
|
|
br 1f / branch if block already in a I/O buffer
|
|
bis $2000,(r5) / set read bit (bit 100 in I/O buffer)
|
|
jsr r0,poke / perform the read
|
|
1:
|
|
clr *$ps / ps = 0
|
|
rts r0
|
|
|
|
dskrd:
|
|
jsr r0,bufaloc / shuffle off to bufaloc; get a free I/O buffer
|
|
br 1f
|
|
bis $2000,(r5) / set bit 10 of word 1 of I/O queue entry
|
|
/ for buffer
|
|
jsr r0,poke / just assigned in bufaloc, bit 10=1 says read
|
|
1:
|
|
clr *$ps
|
|
bit $22000,(r5) / if either bits 10, or 13 are 1; jump to idle
|
|
beq 1f
|
|
jsr r0,idle; s.wait+2
|
|
br 1b
|
|
1:
|
|
add $8,r5 / r5 points to first word of data in block just read
|
|
/ in
|
|
rts r0
|
|
|
|
wslot:
|
|
jsr r0,bufaloc / get a free I/O buffer; pointer to first
|
|
br 1f / word in buffer in r5
|