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