123146Smckusick /* 226900Skarels * Copyright (c) 1980,1986 Regents of the University of California. 323146Smckusick * All rights reserved. The Berkeley software License Agreement 423146Smckusick * specifies the terms and conditions for redistribution. 523146Smckusick */ 611087Ssam 7*29801Skarels /* "@(#)raboot.c 7.2 (Berkeley) 08/28/86" */ 8*29801Skarels #include <sys/disklabel.h> 923146Smckusick 1026900Skarels .set MAJOR,9 /* major("/dev/ra0a") */ 1126900Skarels 1211087Ssam /* 1326900Skarels * 1st level boot program: loads next 7.5Kbytes from 1411188Ssam * boot sector of file system and sets it up to run. 1526900Skarels * Except for MAJOR definition above, should work 1626900Skarels * with any disk using 750 boot rom. 1711087Ssam */ 1811188Ssam .set RELOC,0x50000 1912218Ssam .set BOOTLAST,15 /* last boot sector */ 2011188Ssam .set RABPSECT,512 /* bytes per sector */ 2111087Ssam 2211087Ssam init: 2311188Ssam .word 0 /* entry mask for dec monitor */ 2411188Ssam nop;nop;nop;nop;nop;nop;nop;nop /* some no-ops for 750 boot to skip */ 2511188Ssam nop;nop; 2611087Ssam start: 2726900Skarels movl $MAJOR,r10 /* major("/dev/xx0a") */ 2826900Skarels extzv $18,$1,r1,r4 /* get UBA number from R1 */ 2926900Skarels xorb2 $0x01,r4 /* complement bit */ 3026900Skarels insv r4,$24,$8,r10 /* set UBA number */ 3126900Skarels insv r3,$16,$8,r10 /* drive number */ 3226900Skarels extzv $12,$4,r5,r4 /* get partition from r5 */ 3326900Skarels bicw2 $0xf000,r5 /* remove from r5 */ 3426900Skarels insv r4,$8,$8,r10 /* set partition */ 3526900Skarels movl r5,r11 /* boot flags */ 3626900Skarels movl r1,r9 /* UNIBUS I/O page address */ 3712218Ssam movl r2,r8 /* boot device CSR */ 3826900Skarels movl r3,r7 /* unit number */ 39*29801Skarels brw start0 40*29801Skarels 41*29801Skarels /* 42*29801Skarels * Leave space for pack label. 43*29801Skarels */ 44*29801Skarels pad: 45*29801Skarels .space LABELOFFSET - (pad - init) 46*29801Skarels packlabel: 47*29801Skarels .space d_end_ 48*29801Skarels 49*29801Skarels start0: 5011188Ssam movl $RELOC,sp 5126900Skarels moval init,r4 5226900Skarels movc3 $end,(r4),(sp) 5326900Skarels movl r9,r1 /* UNIBUS I/O page address */ 5412218Ssam movl r8,r2 /* boot device CSR */ 5526900Skarels movl r7,r3 /* unit number */ 5611188Ssam jmp *$RELOC+start2 5711188Ssam /* now running relocated */ 5811188Ssam /* bring in the boot program */ 5911087Ssam start2: /* running relocated */ 6012218Ssam pushr $0xffff /* BEGIN FIREWALL */ 6112218Ssam movl $1,r4 /* first boot sector */ 6211188Ssam clrl r5 /* transfer address */ 6312218Ssam clrl -(sp) /* transfer address */ 6411087Ssam 1: 6512218Ssam movl r4,r8 /* requested sector # */ 6612218Ssam jsb (r6) /* call ROM-based driver */ 6711188Ssam blbs r0,2f 6811188Ssam halt /* read error */ 6911087Ssam 2: 7012218Ssam addl2 $RABPSECT,r5 /* bump address */ 7112218Ssam movl r5,(sp) 7212218Ssam aobleq $BOOTLAST,r4,1b 7311087Ssam 7426900Skarels .set PROGSIZE,(BOOTLAST*RABPSECT) 7511188Ssam done: 7612218Ssam tstl (sp)+ /* pop address */ 7712218Ssam popr $0xffff /* END FIREWALL */ 7826900Skarels movl $PROGSIZE,r4 7911188Ssam clrcor: 8026900Skarels clrq (r4) 8126900Skarels acbl $RELOC,$8,r4,clrcor 8211188Ssam /* start loaded program */ 8311188Ssam calls $0,*$0 8411188Ssam brw start2 8511087Ssam end: 86