ehk.s 4c / rk06 disk driver hkcs1 = 177440 / control & status 1 hkda = 177446 / desired track/sector address hkcs2 = 177450 / control & status 2 hkds = 177452 / drive status hkdc = 177460 / desired cylinder ack = 03 / pack acknowledge rk07 = 2000 / bit set for rk07 drives ddt = 400 / drive type bit (hkds) clear = 040 / subsystem clear inc $-1 / first time ?? dirty but saves space bne 1f mov $clear,*$hkcs2 bit $ddt,*$hkds / is it an rk07? beq 2f mov $ack+rk07,*$hkcs1 br 0f 2: mov $ack,*$hkcs1 0: tstb *$hkcs1 bpl 0b / wait for acknowledge to complete 1: mov dska,r1 clr r0 div $22.,r0 / r0 = sectors r1 = blocks mov r1,-(sp) mov r0,r1 clr r0 div $3.,r0 / r0 = cylinder r1 = track bisb r1,1(sp) mov r0,*$hkdc / cylinder wanted mov $hkda,r1 mov (sp)+,(r1) / track & sector wanted mov ba,-(r1) / bus address mov wc,-(r1) / word count mov $iocom,-(sp) bit $ddt,*$hkds / an rk07? beq 1f bis $rk07,(sp) 1: mov (sp)+,-(r1) 1: tstb (r1) bpl 1b / wait for iocom to complete rts pc hhkf.s 4c / format RK06/7 disk packs / written since you can't trust DEC shitty one / / ian j / UNSW may '79 / hkcs1 = 177440 / control & status 1 hkwc = 177442 / word count hkba = 177444 / bus address hkda = 177446 / track and sector hkcs2 = 177450 / control & status 2 hkds = 177452 / drive status hkdc = 177460 / desired cylinder zero = 2000 / a word of zeros cack = 2002 / an 'ack' command of the right type cwhd = 2004 / a 'write header' command cwrt = 2006 / a 'write' command table = 2010 / build sector header here ack = 003 / pack acknowledge whd = 027 / write header write = 023 / write data rk07 = 2000 / this drive is an rk07 clear = 040 / subsystem clear bai = 020 / bus increment inhibit ddt = 400 / disk drive type 5 / reset mov $140000,sp / decent stack clr *$zero / really a zero now jsr pc,mesg <\n\n RK06/7 disk formatter\n\n\0>; .even jsr pc,mesg <ready drive 0 and type y\n\0>; .even jsr pc,getc mov r0,-(sp) mov $'\n,r0 jsr pc,putc cmp (sp)+,$'y beq 1f jsr pc,mesg <\nNo formatting done\n\n\0>; .even rts pc 1: mov $clear,*$hkcs2 mov $ack,cack mov $whd,cwhd mov $write,cwrt mov $1233.,r4 / number of tracks on an rk06 bit $ddt,*$hkds / is it an rk07? beq 1f mov $rk07+ack,cack mov $rk07+whd,cwhd mov $rk07+write,cwrt mov $2445.,r4 / number of tracks on an rk07 1: mov cack,*$hkcs1 1: tstb *$hkcs1 bge 1b / wait for acknowledge 2: / calculate cylinder and track address of next track to be done mov r4,r3 dec r3 / track address clr r2 div $3,r2 / r2 = cyl r3 = trk / set up table of sector headers mov $22.,r0 mov $table,r1 mov r3,r5 ash $5,r5 / position track no for header bis $140000,r5 / good sectors all 0: mov r2,(r1)+ / cylinder is first word mov r5,(r1)+ / sector/trk is second word mov r5,(r1) xor r2,(r1)+ / check sum inc r5 / next sector sob r0,0b / all 22 sectors thankyou / do the track formatting swab r3 / postion track no in hibyte mov r3,*$hkda / want this track mov r2,*$hkdc / want this cyl mov $table,*$hkba / 22 sector headers live here mov $-66.,*$hkwc / 66 words for 22 sector headers clr *$hkcs2 / drive 0 no BAI mov cwhd,*$hkcs1 / will format 1 track 1: tstb *$hkcs1 / wait for format to complete bge 1b tst *$hkcs1 blt 2f / init the track with all zeros mov $-5632.,*$hkwc mov $zero,*$hkba mov $bai,*$hkcs2 mov r3,*$hkda mov r2,*$hkdc mov cwrt,*$hkcs1 1: tstb *$hkcs1 / wait for write to complete bge 1b tst *$hkcs1 blt 2f dec r4 jne 2b / do them all / formatting complete return to loader jsr pc,mesg <\n\nFormatting complete\n\nmachine halted\n\0>; .even 0 2: jsr pc,mesg <hkf: error\n\0>; .even rts pc / read and echo character from tty. / perform normal cr/lf uc/lc mapping. tks = 177560 tkb = 177562 getc: tstb *$tks bge getc mov tkb,r0 bic $!177,r0 cmp r0,$'A blo 1f cmp r0,$'Z bhi 1f add $'a-'A,r0 1: cmp r0,$'\r bne putc mov $'\n,r0 / put a character on the tty. / also performs delay. tps = 177564 tpb = 177566 putc: cmp r0,$'\n bne 1f mov $'\r,r0 jsr pc,putc mov $'\n,r0 1: tstb tps bpl 1b mov r0,tpb rts pc / write a string to tty / jsr pc, mesg; <string\0>; .even mesg: movb *(sp),r0 beq 1f jsr pc,putc inc (sp) br mesg 1: add $2,(sp) bic $1,(sp) rts pc 1rhk.s 4c / read rk06 rblk: iocom = 21 whk.s 4c / write rk06 wblk: iocom = 23 ,