1 /* 2 * Copyright (c) 1980 Regents of the University of California. 3 * All rights reserved. The Berkeley software License Agreement 4 * specifies the terms and conditions for redistribution. 5 */ 6 7 /* "@(#)hpboot.c 6.3 (Berkeley) 06/26/85" */ 8 9 10 /* 11 * RP??/RM?? 1st level boot program: loads next 7.5Kbytes from 12 * boot sector of file system and sets it up to run. 13 * Always reads from drive 0. 14 */ 15 .set BOOTSIZE,15 /* size of boot in sectors */ 16 .set RELOC,0x70000 17 /* MBA registers */ 18 .set M_cr,4 /* MBA control reg */ 19 .set M_var,12 /* MBA virt addr reg */ 20 .set M_bc,16 /* MBA byte count reg */ 21 .set M_map,0x800 /* start of MBA map reg's */ 22 .set MBAinit,1 /* MBA init bit in MBA control reg */ 23 /* Drive information */ 24 .set RP,0x400 /* start of drive registers */ 25 .set RP_cr,RP+0 /* control status register */ 26 .set RP_sr,RP+4 /* drive status reg */ 27 .set RP_stk,RP+0x14 /* desired track/sector reg */ 28 .set RP_dt,RP+0x18 /* drive type reg */ 29 .set RP_off,RP+0x24 /* RP offset reg */ 30 .set RP_cyl,RP+0x28 /* desired cyl reg */ 31 .set RPBPSECT,512 /* bytes per sector */ 32 /* RP?? function codes, status bits */ 33 .set RP_GO,1 /* go */ 34 .set RP_RED,070 /* read */ 35 .set RP_DC,010 /* drive clear */ 36 .set RP_RIP,020 /* read in preset */ 37 .set RP_FMT,0x1000 /* format 22 */ 38 .set RP_MOL,0x1000 /* medium on line */ 39 .set RP_DRY,0200 /* drive ready */ 40 .set RP_ERR,040000 /* composite error */ 41 .set RP_pDRY,7 /* bit position of RP_DRY */ 42 .set RP_pERR,14 /* bit position of RP_ERR */ 43 44 init: 45 .word 0 /* entry mask for DEC monitor */ 46 nop;nop;nop;nop;nop;nop;nop;nop /* some no-ops for 750 boot to skip */ 47 nop;nop; 48 start: 49 movl r5,r11 50 movl $RELOC,sp 51 moval init,r6 52 movc3 $end,(r6),(sp) 53 jmp *$RELOC+start1 54 /* running relocated */ 55 start1: 56 /* get cpu type */ 57 .set SID,0x3e 58 mfpr $SID,r0 59 extzv $24,$8,r0,r0 60 ashl $2,r0,r1 61 /* get mba location and init it */ 62 moval physMBA,r2 63 addl3 r1,r2,r3 64 movl (r3),r9 65 movl $MBAinit,M_cr(r9) 66 /* read-in-preset the drive and set format */ 67 movl $RP_RIP+RP_GO,RP_cr(r9) 68 movl $RP_FMT,RP_off(r9) 69 70 .set PROGSIZE,(BOOTSIZE*RPBPSECT) 71 start2: 72 movl $0,RP_cyl(r9) 73 movl $1,RP_stk(r9) 74 movl $-PROGSIZE,M_bc(r9) 75 /* set up MASSBUS map for DMA */ 76 clrl r0 77 1: 78 bisl3 $0x80000000,r0,M_map(r9)[r0] 79 aobleq $BOOTSIZE,r0,1b 80 clrl M_var(r9) 81 movl $RP_RED+RP_GO,RP_cr(r9) 82 rprdy: 83 movl RP_sr(r9),r0 84 bbc $RP_pDRY,r0,rprdy 85 bbs $RP_pERR,r0,rperr 86 clrl r3 87 /* Eagle's are too fast for the controller. Slow the thing down. */ 88 buzz: acbl $2000,$1,r3,buzz 89 bicpsw $2 90 jbr clear 91 rperr: 92 halt 93 /* clear core and execute program */ 94 clear: 95 movl $PROGSIZE,r3 96 clrcor: 97 clrq (r3) 98 acbl $RELOC,$8,r3,clrcor 99 /* run loaded program */ 100 clrl r10 /* major("/dev/hp0a") */ 101 calls $0,*$0 102 brw start2 103 104 .align 2 105 physMBA: 106 .long 0 107 .long 0x20010000 108 .long 0xf28000 109 110 end: 111