;+ ; ; RK11D/RK05 boot device driver. ; ; By John Wilson. This file is hereby released into the public domain. ; ; 11/13/95 JMBW Created. ; ;- rkds= 00 ;(777400) drive status rker= 02 ;(777402) error rkcs= 04 ;(777404) control/status rkwc= 06 ;(777406) word count rkba= 10 ;(777410) bus addr rkda= 12 ;(777412) disk addr rkdb= 16 ;(777416) data buf (none of our business) ; rkrtry= 5 ;max retry count ; rkscp= 20000 ;search complete ; rkrdy= 200 ;ready ; rkcrs= 0*2 ;control reset rkwrd= 1*2 ;write data rkrdd= 2*2 ;read data rksek= 4*2 ;seek rkdrs= 6*2 ;drive reset ; rkgo= 1 ;GO bit ; .btini ;RK11D init code mov bcsr,r0 ;get base CSR mov rkda(r0),r0 ;look up unit # ror r0 ;move to bits 2:0 ror r0 ror r0 ror r0 bic #^C7,r0 ;isolate mov r0,bunit ;save .btfin ;finish up boot process ;+ ; ; RK11D/RK05 bootstrap read driver. ; ; r5 memory addr ; r4 block count ; r3 starting block ; ;- read: mov #rkrtry,r2 ;init retry count 10$: mov r3,r0 ;copy starting block # mov #12.-16.,r1 ;sec=end of track, init track count to -1 20$: add #16.,r1 ;count a track sub #12.,r0 ;subtract 12. sectors bcc 20$ ;loop until sectors underflow add r0,r1 ;make sector # positive again mov bcsr,r0 ;get base CSR add #rkda,r0 ;point at disk addr bic #17777,(r0) ;clear out all but unit # bis r1,(r0) ;set starting addr mov r5,-(r0) ;starting core addr in RKBA mov r4,r1 ;copy block count swab r1 ;convert to word count neg r1 ;take 2's complement mov r1,-(r0) ;put in RKWC mov #rkrdd!rkgo,-(r0) ;send command 30$: tstb (r0) ;wait for RDY to come on bpl 30$ tst (r0) ;ERR set? bpl 70$ ;no mov #rkcrs!rkgo,(r0) ;reset controller 40$: tstb (r0) ;wait for completion bpl 40$ mov #rkdrs!rkgo,(r0) ;reset drive 50$: mov (r0),r1 ;fetch result bmi 60$ ;error, give up now cmp r1,#rkscp!rkrdy!rkdrs ;finished? bne 50$ dec r2 ;give up yet? bne 10$ ;no 60$: bpt ;give up 70$: rti ; .end boot