- movl $names+RELOC,r6
- movzbl $ROOTINO,r0
-nxti:
- clrw *$bno /* start with first block in inode */
- bsbw iget
- tstb (r6)
- beql getfil /* found correct inode! */
-get1b:
- bsbw rmblk /* read inode from block now in memory */
- beql start2
- movl $buf,r7
-nxtent:
- tstw (r7)
- beql dirchk
- cmpc3 $NAMSIZ,(r6),2(r7)
- bneq dirchk
- movzwl (r7),r0
- addl2 $NAMSIZ,r6
- brb nxti
-dirchk:
- acbl $buf+BLKSIZ-1,$DIRSIZ,r7,nxtent
- brb get1b
-/* found inode for desired file... read it in */
-getfil:
- clrl bufptr
-getlop:
- bsbb rmblk
- beql clear
- addl2 $BLKSIZ,bufptr
- brb getlop
-clear:
- movl *$size,r3
-clrcor:
- clrq (r3)
- acbl $RELOC,$8,r3,clrcor
-/* run loaded program */
- movl $8,r10 /* major("/dev/hl0a") */
- calls $0,*$0
- brw start2
-/* iget: get inode block whose # is in r0 */
-iget:
- addl3 $(INOBLK*(NBOO+NSUP))-1,r0,r8
- divl3 $INOBLK,r8,r4
- bsbw rblk
- bicl2 $INOMSK,r8
- mull2 $INOSIZ,r8
- addl2 $buf,r8
- movc3 $time-inode,(r8),*$inode
- rsb
-/* rmblk: read in bno into addr */
-rmblk:
- movzwl *$bno,r0
- addw2 $3,*$bno
- addl2 $addr,r0
-/* this boot assumes only small files (<=10k bytes, ie. no indirect blocks) */
- extzv $0,$24,(r0),r4
- bneq rblk
- rsb
-/* rblk: read disk block whose number is in r4 */
-rblk:
- movzbw $HL_RHDR+HL_GO,HL_cs(r10)
- bsbw hlwait
- movzwl HL_mp(r10),r0
- extzv $7,$9,r0,r3 /* get current cylinder */
- mull2 $BLKSIZ/BPSECT,r4
- clrl r5
- ediv $HLST,r4,r0,r1 /* get desired cylinder */
- movzbl $1,r5
- subl2 r0,r3
- bgeq 1f
- mnegl r3,r3
- bisl2 $HL_DIR,r5 /* move towards the spindle */