1
0
mirror of https://github.com/DoctorWkt/unix-jun72.git synced 2026-02-01 22:43:27 +00:00
Files
DoctorWkt.unix-jun72/pages/e08-05
2008-05-02 17:50:21 +00:00

57 lines
2.1 KiB
Plaintext

mov $rkda+2,r3 /
mov ac,-(sp) / put remainder from divide on stack; gives
/ sector number
mov $4,lsh / shift quotient 4 bits, to align with cyl and surf
/ bits in rkda
bis mq,(sp) / or mq with sector; gives total disk address
br 3f
prf: / drum
bit $1,active / test drum busy bit
bne 2f / branch if bit is set
bis $1,active / set drum busy bit
mov r1,rfap / rfap points to current I/O queue entry for drum
mov $dae+2,r3
clr -(sp)
movb 2(r1),1(sp) / move low byte of physical block number into
/ high byte of stack
clr -(sp) / word
movb 3(r1),(sp) / move high byte of physical block number into
/ low byte of stack
mov (sp)+,-(r3) / load dae with high byte of physical block
/ number
3:
mov (sp)+,-(r3) / load rkda register; load dar register
mov 6(r1),-(r3) / load bus address register
mov 4(r1),-(r3) / load word count register
mov $103,-(sp) / 103 indicates write operation when loaded
/ in csr
bit $2000,(r1) / if bit 10 of word 1 of I/O queue entry is
/ a one
beq 3f / then read operation is indicated
mov $105,(sp) / 105 indicates read operation
3:
mov (sp)+,-(r3) / load csr with interrupt enabled, command, go
br seta
ptc: / tape I/O
bit $4,active
bne 2f
mov tccm,r3
swab r3
bic $!7,r3
add $2,r3
cmpb r3,(r1)
beq 3f
movb $1,tccm / stop transport if not same unit
3:
bis $4,active
mov r1,tcap
mov $20.,tcerrc
mov $tape1,tcstate
movb (r1),r3 / device
sub $2,r3 / now unit
swab r3
bis $103,r3 / now rbn,for,unit,ie
mov r3,tccm
seta: / I/O queue bookkeeping; set read/write waiting bits.
mov (r1),r3 / move word 1 of I/O queue entry into r3