xref: /csrg-svn/sys/vax/stand/boot.c (revision 315)
1*315Sbill /*	boot.c	1.1	06/28/80 */
2*315Sbill 
3*315Sbill #include "../h/param.h"
4*315Sbill #include "../h/ino.h"
5*315Sbill #include "../h/inode.h"
6*315Sbill #include "../h/filsys.h"
7*315Sbill #include "../h/dir.h"
8*315Sbill #include "../h/vm.h"
9*315Sbill #include <a.out.h>
10*315Sbill #include "saio.h"
11*315Sbill 
12*315Sbill char line[100];
13*315Sbill 
14*315Sbill main()
15*315Sbill {
16*315Sbill 	int i;
17*315Sbill 
18*315Sbill 	printf("\nBoot\n");
19*315Sbill 	do {
20*315Sbill 		printf(": "); gets(line);
21*315Sbill 		i = open(line,0);
22*315Sbill 	} while (i < 0);
23*315Sbill 
24*315Sbill 	copyunix(i);
25*315Sbill }
26*315Sbill 
27*315Sbill copyunix(io)
28*315Sbill register io;
29*315Sbill {
30*315Sbill 	struct exec x;
31*315Sbill 	register int i;
32*315Sbill 	char *addr;
33*315Sbill 
34*315Sbill 	i = read(io, (char *)&x, sizeof x);
35*315Sbill 	if (i != sizeof x || x.a_magic != 0410)
36*315Sbill 		_stop("Bad format\n");
37*315Sbill 	printf("%d", x.a_text);
38*315Sbill 	if (read(io, (char *)0, x.a_text) != x.a_text)
39*315Sbill 		goto shread;
40*315Sbill 	addr = (char *)x.a_text;
41*315Sbill 	while ((int)addr & CLOFSET)
42*315Sbill 		*addr++ = 0;
43*315Sbill 	printf("+%d", x.a_data);
44*315Sbill 	if (read(io, addr, x.a_data) != x.a_data)
45*315Sbill 		goto shread;
46*315Sbill 	addr += x.a_data;
47*315Sbill 	printf("+%d", x.a_bss);
48*315Sbill 	x.a_bss += 128*512;	/* slop */
49*315Sbill 	for (i = 0; i < x.a_bss; i++)
50*315Sbill 		*addr++ = 0;
51*315Sbill 	x.a_entry &= 0x7fffffff;
52*315Sbill 	printf(" start 0x%x\n", x.a_entry);
53*315Sbill 	(*((int (*)()) x.a_entry))();
54*315Sbill 	_exit();
55*315Sbill shread:
56*315Sbill 	_stop("Short read\n");
57*315Sbill }
58