date and time created 83/02/16 22:06:26 by sam
authorSam Leffler <sam@ucbvax.Berkeley.EDU>
Thu, 17 Feb 1983 14:06:26 +0000 (06:06 -0800)
committerSam Leffler <sam@ucbvax.Berkeley.EDU>
Thu, 17 Feb 1983 14:06:26 +0000 (06:06 -0800)
SCCS-vsn: sys/vax/mdec/hpboot.c 4.1

usr/src/sys/vax/mdec/hpboot.c [new file with mode: 0644]

diff --git a/usr/src/sys/vax/mdec/hpboot.c b/usr/src/sys/vax/mdec/hpboot.c
new file mode 100644 (file)
index 0000000..b57639c
--- /dev/null
@@ -0,0 +1,100 @@
+/*     hpboot.c        4.1     83/02/16        */
+
+/*
+ * RP??/RM?? 1st level boot program: loads next 7.5Kbytes from
+ * boot sector of file system and sets it up to run.
+ * Always reads from drive 0.
+ */
+       .set    BOOTSIZE,15             /* size of boot in sectors */
+       .set    RELOC,0x70000
+/* MBA registers */
+       .set    M_cr,4                  /* MBA control reg */
+       .set    M_var,12                /* MBA virt addr reg */
+       .set    M_bc,16                 /* MBA byte count reg */
+       .set    M_map,0x800             /* start of MBA map reg's */
+       .set    MBAinit,1               /* MBA init bit in MBA control reg */
+/* Drive information */
+       .set    RP,0x400                /* start of drive registers */
+       .set    RP_cr,RP+0              /* control status register */
+       .set    RP_sr,RP+4              /* drive status reg */
+       .set    RP_stk,RP+0x14          /* desired track/sector reg */
+       .set    RP_dt,RP+0x18           /* drive type reg */
+       .set    RP_off,RP+0x24          /* RP offset reg */
+       .set    RP_cyl,RP+0x28          /* desired cyl reg */
+       .set    RPBPSECT,512            /* bytes per sector */
+/* RP?? function codes, status bits  */
+       .set    RP_GO,1                 /* go */
+       .set    RP_RED,070              /* read */
+       .set    RP_DC,010               /* drive clear */
+       .set    RP_RIP,020              /* read in preset */
+       .set    RP_FMT,0x1000           /* format 22 */
+       .set    RP_MOL,0x1000           /* medium on line */
+       .set    RP_DRY,0200             /* drive ready */
+       .set    RP_ERR,040000           /* composite error */
+       .set    RP_pDRY,7               /* bit position of RP_DRY */
+       .set    RP_pERR,14              /* bit position of RP_ERR */
+
+init:
+       .word   0                       /* entry mask for DEC monitor */
+       nop;nop;nop;nop;nop;nop;nop;nop /* some no-ops for 750 boot to skip */
+       nop;nop;
+start:
+       movl    r5,r11
+       movl    $RELOC,sp
+       moval   init,r6
+       movc3   $end,(r6),(sp)
+       jmp     *$RELOC+start1
+/* running relocated */
+start1:
+/* get cpu type */
+       .set    SID,0x3e
+       mfpr    $SID,r0
+       extzv   $24,$8,r0,r0
+       ashl    $2,r0,r1
+/* get mba location and init it */
+       moval   physMBA,r2
+       addl3   r1,r2,r3
+       movl    (r3),r9
+       movl    $MBAinit,M_cr(r9)
+/* read-in-preset the drive and set format */
+       movl    $RP_RIP+RP_GO,RP_cr(r9)
+       movl    $RP_FMT,RP_off(r9) 
+
+       .set    PROGSIZE,(BOOTSIZE*RPBPSECT)
+start2:
+       movl    $0,RP_cyl(r9)
+       movl    $1,RP_stk(r9)
+       movl    $-PROGSIZE,M_bc(r9)
+/* set up MASSBUS map for DMA */
+       clrl    r0
+1:
+       bisl3   $0x80000000,r0,M_map(r9)[r0]
+       aobleq  $BOOTSIZE,r0,1b
+       clrl    M_var(r9)
+       movl    $RP_RED+RP_GO,RP_cr(r9)
+rprdy:
+       movl    RP_sr(r9),r0
+       bbc     $RP_pDRY,r0,rprdy
+       bbs     $RP_pERR,r0,rperr
+       bicpsw  $2
+       jbr     clear
+rperr:
+       halt
+/* clear core and execute program */
+clear:
+       movl    $PROGSIZE,r3
+clrcor:
+       clrq    (r3)
+       acbl    $RELOC,$8,r3,clrcor
+/* run loaded program */
+       clrl    r10                     /* major("/dev/hp0a") */
+       calls   $0,*$0
+       brw     start2
+
+       .align  2
+physMBA:
+       .long   0
+       .long   0x20010000
+       .long   0xf28000
+
+end: