|
|
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.