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