~kris/9p

9hist

8f03e84a706272bf37086b931a998c298cca0421 — David du Colombier 36 years ago 73ce821
Plan 9 from Bell Labs 1990-05-04
M gnot/clock.c => gnot/clock.c +1 -0
@@ 118,6 118,7 @@ clock(Ureg *ur)
		unlock(&m->alarmlock);
	}
	kbdclock();
	mouseclock();
	if((ur->sr&SPL(7)) == 0){
		spllo();
		if(p && p->state==Running)

M gnot/devmnt.c => gnot/devmnt.c +0 -1
@@ 382,7 382,6 @@ mntclose(Chan *c)
	if(c == m->mntpt)
		m->mntpt = 0;
	if(decref(m) == 0){		/* BUG: need to hang up all pending i/o */
print("close mount table %d\n", m->mntid);
		qlock(m);
		close(m->msg);
		m->msg = 0;

M gnot/fns.h => gnot/fns.h +1 -0
@@ 73,6 73,7 @@ void	mapstack(Proc*);
void	mmuinit(void);
int	mount(Chan*, Chan*, int);
void	mousebuttons(int);
void	mouseclock(void);
Chan	*namec(char*, int, int, ulong);
void	nexterror(void);
Alarm	*newalarm(void);

M gnot/l.s => gnot/l.s +6 -8
@@ 178,20 178,18 @@ TEXT	dkintr(SB), $0			/* level 2 */

TEXT	mouseintr(SB), $0		/* level 4 */

	MOVEM	$0x8082, -(A7)		/* D0, A0, A6 */
	MOVEM	$0x80C2, -(A7)		/* D0, A0, A1, A6 */
	MOVL	$a6base(SB), A6
	MOVL	$15, R0			/* mask off hex switch */
	ANDB	MOUSE,R0		/* clears quadrature interrupt */
	LEA	mousetab(SB)(R0.W*8), A0
#ifdef asdf
	LEA	mouse(SB), A1
	MOVL	(A0)+, R0
	ADDL	R0, mousedx(SB)
	ADDL	R0, (A1)+		/* dx */
	MOVL	(A0), R0
	ADDL	R0, mousedy(SB)
	ADDL	$1, mousechanged(SB)
	ADDL	$1, dotrack(SB)
#endif
	MOVEM	(A7)+, $0x4101
	ADDL	R0, (A1)+		/* dy */
	ADDL	$1, (A1)		/* track */
	MOVEM	(A7)+, $0x4301
	RTE

TEXT	uartintr(SB), $0		/* level 5 */

M gnot/sysproc.c => gnot/sysproc.c +2 -6
@@ 175,18 175,14 @@ sysexec(ulong *arg)
	if(!indir)
		strcpy(elem, u->elem);
	n = (*devtab[tc->type].read)(tc, &exec, sizeof(Exec));
	if(n < 2){
		print("short read\n");
	if(n < 2)
    Err:
		error(0, Ebadexec);
	}
	if(n==sizeof(Exec) && exec.magic==A_MAGIC){
		if((exec.text&KZERO)
		|| (ulong)exec.entry < UTZERO+sizeof(Exec)
		|| (ulong)exec.entry >= UTZERO+sizeof(Exec)+exec.text){
			print("bad header sizes\n");
		|| (ulong)exec.entry >= UTZERO+sizeof(Exec)+exec.text)
			goto Err;
		}
		goto Binary;
	}


M port/devbit.c => port/devbit.c +173 -5
@@ 40,7 40,72 @@ struct{
void	bitcompact(void);
void	bitfree(Bitmap*);
extern	Bitmap	screen;
Mouse	mouse;

struct{
	/*
	 * First three fields are known in l.s
	 */
	int	dx;		/* interrupt-time delta */
	int	dy;
	int	track;		/* update cursor on screen */
	Mouse;
	int	changed;	/* mouse structure changed since last read */
	Rendez	r;
}mouse;

struct{
	Cursor;
	Lock;
	int	visible;	/* on screen */
	Rectangle r;		/* location */
}cursor =
{
	{{0, 0},
	{0xFFE0, 0xFFE0, 0xFFC0, 0xFF00,
	 0xFF00, 0xFF80, 0xFFC0, 0xFFE0,
	 0xE7F0, 0xE3F8, 0xC1FC, 0x00FE,
	 0x007F, 0x003E, 0x001C, 0x0008,
	},
	{0x0000, 0x7FC0, 0x7F00, 0x7C00,
	 0x7E00, 0x7F00, 0x6F80, 0x67C0,
	 0x43E0, 0x41F0, 0x00F8, 0x007C,
	 0x003E, 0x001C, 0x0008, 0x0000,
	}},
};

ulong setbits[16];
Bitmap	set =
{
	setbits,
	0,
	1,
	0,
	{0, 0, 16, 16}
};

ulong clrbits[16];
Bitmap	clr =
{
	clrbits,
	0,
	1,
	0,
	{0, 0, 16, 16}
};

ulong cursorbackbits[16];
Bitmap cursorback =
{
	cursorbackbits,
	0,
	1,
	0,
	{0, 0, 16, 16}
};

void	cursortobitmap(void);
void	cursoron(int);
void	cursoroff(int);

enum{
	Qdir,


@@ 74,6 139,7 @@ bitreset(void)
	bit.words = ialloc(conf.nbitbyte, 0);
	bit.nwords = conf.nbitbyte/sizeof(ulong);
	bit.wfree = bit.words;
	cursortobitmap();
}

void


@@ 82,6 148,7 @@ bitinit(void)
	lock(&bit);
	bit.bltuse = 0;
	unlock(&bit);
	cursoron(1);
}

Chan*


@@ 241,6 308,7 @@ bitwrite(Chan *c, void *va, long n)
	uchar *p, *q;
	long m, v, miny, maxy, t, x, y;
	ulong l, nw, ws;
	int off;
	Point pt;
	Rectangle rect;
	Bitmap *bp, *src, *dst;


@@ 330,18 398,27 @@ bitwrite(Chan *c, void *va, long n)
			dst = &bit.map[v];
			if(v<0 || v>=conf.nbitmap || dst->ldepth < 0)
				error(0, Ebadbitmap);
			off = 0;
			if(v == 0)
				off = 1;
			pt.x = GLONG(p+3);
			pt.y = GLONG(p+7);
			v = GSHORT(p+11);
			src = &bit.map[v];
			if(v<0 || v>=conf.nbitmap || src->ldepth < 0)
				error(0, Ebadbitmap);
			if(v == 0)
				off = 1;
			rect.min.x = GLONG(p+13);
			rect.min.y = GLONG(p+17);
			rect.max.x = GLONG(p+21);
			rect.max.y = GLONG(p+25);
			v = GSHORT(p+29);
			if(off)
				cursoroff(1);
			bitblt(dst, pt, src, rect, v);
			if(off)
				cursoron(1);
			m -= 31;
			p += 31;
			break;


@@ 379,6 456,9 @@ bitwrite(Chan *c, void *va, long n)
			dst = &bit.map[v];
			if(v>=conf.nbitmap || dst->ldepth<0)
				error(0, Ebadbitmap);
			off = 0;
			if(v == 0)
				off = 1;
			pt.x = GLONG(p+3);
			pt.y = GLONG(p+7);
			v = GSHORT(p+11);


@@ 390,7 470,11 @@ bitwrite(Chan *c, void *va, long n)
			q = memchr(p, 0, m);
			if(q == 0)
				error(0, Ebadblt);
			if(off)
				cursoroff(1);
			string(dst, pt, &defont0/*BUG*/, (char*)p, v);
			if(off)
				cursoron(1);
			q++;
			m -= q-p;
			p = q;


@@ 411,6 495,9 @@ bitwrite(Chan *c, void *va, long n)
			dst = &bit.map[v];
			if(v>=conf.nbitmap || dst->ldepth<0)
				error(0, Ebadbitmap);
			off = 0;
			if(v == 0)
				off = 1;
			rect.min.x = GLONG(p+3);
			rect.min.y = GLONG(p+7);
			rect.max.x = GLONG(p+11);


@@ 428,7 515,11 @@ bitwrite(Chan *c, void *va, long n)

				for(i=0; i<16; i++)
					t.bits[i] = src->base[i]>>16;
				if(off)
					cursoroff(1);
				texture(dst, rect, &t, v);
				if(off)
					cursoron(1);
			}
			m -= 23;
			p += 23;


@@ 449,6 540,9 @@ bitwrite(Chan *c, void *va, long n)
			dst = &bit.map[v];
			if(v>=conf.nbitmap || dst->ldepth<0)
				error(0, Ebadbitmap);
			off = 0;
			if(v == 0)
				off = 1;
			miny = GLONG(p+3);
			maxy = GLONG(p+7);
			if(miny>maxy || miny<dst->r.min.y || maxy>dst->r.max.y)


@@ 466,6 560,8 @@ bitwrite(Chan *c, void *va, long n)
			m -= 11;
			if(m < l*(maxy-miny))
				error(0, Ebadblt);
			if(off)
				cursoroff(1);
			for(y=miny; y<maxy; y++){
				q = (uchar*)addr(dst, Pt(dst->r.min.x, y));
				q += (dst->r.min.x&((sizeof(ulong))*ws-1))/8;


@@ 473,6 569,8 @@ bitwrite(Chan *c, void *va, long n)
					*q++ = U2K(*p++);
				m -= l;
			}
			if(off)
				cursoron(1);
			break;
		}



@@ 524,10 622,80 @@ print("bitcompact done\n");
}

void
mousebuttons(int b)
cursortobitmap(void)
{
	int i;

	lock(&cursor);
	for(i=0; i<16; i++){
		setbits[i] = cursor.set[i]<<16;
		clrbits[i] = cursor.clr[i]<<16;
	}
	unlock(&cursor);
}

void
cursoron(int dolock)
{
	if(dolock)
		lock(&cursor);
	if(cursor.visible++ == 0){
		cursor.r.min = mouse.xy;
		cursor.r.max = add(mouse.xy, Pt(16, 16));
		cursor.r = raddp(cursor.r, cursor.offset);
		bitblt(&cursorback, Pt(0, 0), &screen, cursor.r, S);
		bitblt(&screen, add(mouse.xy, cursor.offset),
			&clr, Rect(0, 0, 16, 16), D&~S);
		bitblt(&screen, add(mouse.xy, cursor.offset),
			&set, Rect(0, 0, 16, 16), S|D);
	}
	if(dolock)
		unlock(&cursor);
}

void
cursoroff(int dolock)
{
	if(dolock)
		lock(&cursor);
	if(--cursor.visible == 0)
		bitblt(&screen, cursor.r.min, &cursorback, Rect(0, 0, 16, 16), S);
	if(dolock)
		unlock(&cursor);
}

void
mousebuttons(int b)	/* called splhi */
{
	mouse.buttons = b;
	mouse.changed = 1;
	wakeup(&mouse.r);
}

void
mouseclock(void)	/* called splhi */
{
	if(mouse.buttons != b){
		print("buttons %x\n", b);
		mouse.buttons = b;
	int x, y;

	if(mouse.track && canlock(&cursor)){
		x = mouse.xy.x + mouse.dx;
		if(x < screen.r.min.x)
			x = screen.r.min.x;
		if(x >= screen.r.max.x)
			x = screen.r.max.x;
		y = mouse.xy.y + mouse.dy;
		if(y < screen.r.min.y)
			y = screen.r.min.y;
		if(y >= screen.r.max.y)
			y = screen.r.max.y;
		cursoroff(0);
		mouse.xy = Pt(x, y);
		cursoron(0);
		mouse.dx = 0;
		mouse.dy = 0;
		mouse.track = 0;
		mouse.changed = 1;
		unlock(&cursor);
		wakeup(&mouse.r);
	}
}

M port/devcons.c => port/devcons.c +2 -0
@@ 239,6 239,8 @@ echo(int c)
		DEBUG();
	if(c == 0x15)
		putstrn("^U\n", 3);
	if(c == 0x16)
		dumpqueues();
	else{
		ch = c;
		putstrn(&ch, 1);

M power/bboot.c => power/bboot.c +66 -10
@@ 19,7 19,6 @@ int fd;
int cfd;
int efd;


typedef
struct address {
	char *name;


@@ 65,10 64,11 @@ struct a_out_h {
char	*lookup(char *);
int	readseg(int, int, long, long, int);
int	readkernel(int);
int	readconf(int);
int	outin(char *, char *, char *, int);
void	prerror(char *);
void	error(char *);
void	boot(int);
void	boot(int, char *);

/*
 *  usage: 9b [-a] [server] [file]


@@ 78,11 78,14 @@ void	boot(int);
main(int argc, char *argv[])
{
	int i;
	char *sysname;

	open("#c/cons", 0);
	open("#c/cons", 1);
	open("#c/cons", 1);

	sysname = argv[0];

	argv++;
	argc--;	
	while(argc > 0){


@@ 105,7 108,7 @@ main(int argc, char *argv[])
		break;
	}

	boot(0);
	boot(0, sysname);
	for(;;){
		if(fd > 0)
			close(fd);


@@ 114,14 117,15 @@ main(int argc, char *argv[])
		if(efd > 0)
			close(efd);
		fd = cfd = efd = 0;
		boot(1);
		boot(1, sysname);
	}
}

void
boot(int ask)
boot(int ask, char *addr)
{
	int n;
	char conffile[128];

	if(ask){
		outin("bootfile", bootfile, bbuf, sizeof(bbuf));


@@ 140,7 144,6 @@ boot(int ask)
		return;
	}

	print("Booting %s from server %s\n", bootfile, sys);

	/*
	 *  for the bit, we skip all the ether goo


@@ 252,9 255,18 @@ boot(int ask)
	}
	close(fd);

	print("open file...");
	sprint(conffile, "/mips/conf/%s", addr);
	print("%s...", conffile);
	while((fd = open(conffile, OREAD)) < 0){
		outin("conffile", conffile, conffile, sizeof(conffile));
	}
	if(readconf(fd) < 0)
		prerror("readconf");
	close(fd);

	print("%s...", bootfile);
	while((fd = open(bootfile, OREAD)) < 0){
		outin("bootfile", DEFFILE, bbuf, sizeof(bbuf));
		outin("bootfile", bootfile, bbuf, sizeof(bbuf));
		bootfile = bbuf;
	}
	readkernel(fd);


@@ 336,6 348,50 @@ readseg(int in, int out, long inoff, long outoff, int len)
}

/*
 *  set a configuration value
 */


/*
 *  read the configuration
 */
int
readconf(int fd)
{
	int bfd;
	int n;
	long x;

	/*
 	 *  read the config file
	 */
	n = read(fd, buf, sizeof(buf)-1);
	if(n <= 0)
		return -1;
	buf[n] = 0;

	/*
	 *  write into 4 meg - 4k
	 */
	bfd = open("#b/mem", OWRITE);
	if(bfd < 0){
		prerror("can't open #b/mem");
		return;
	}
	x = 0x80000000 | 4*1024*1024 - 4*1024;
	if(seek(bfd, x, 0) != x){
		close(bfd);
		return -1;
	}
	if(write(bfd, buf, n+1) != n+1){
		close(bfd);
		return -1;
	}

	close(bfd);
	return 0;
}
/*
 *  read the kernel into memory and jump to it
 */
int


@@ 369,7 425,7 @@ readkernel(int fd)
		close(bfd);
		return;
	}
	print("+%d\n", a_out.bss);
	print("+%d", a_out.bss);

	close(bfd);
	bfd = open("#b/boot", OWRITE);


@@ 378,7 434,7 @@ readkernel(int fd)
		return;
	}
	
	print("entry: %ux\n", a_out.entryva);
	print(" entry: 0x%ux\n", a_out.entryva);
	sleep(1000);
	if(write(bfd, &a_out.entryva, sizeof a_out.entryva) != sizeof a_out.entryva){
		prerror("can't start kernel");

M power/boot.c => power/boot.c +13 -5
@@ 18,7 18,6 @@ int fd;
int cfd;
int efd;


typedef
struct address {
	char *name;


@@ 47,7 46,7 @@ void	boot(int);
/*
 *  usage: 9b [-a] [server] [file]
 *
 *  default server is `bitbootes', default file is `/sys/src/9/mips/9'
 *  default server is `bitbootes', default file is `/mips/9'
 */
main(int argc, char *argv[])
{


@@ 58,6 57,12 @@ main(int argc, char *argv[])
	open("#c/cons", 1);
	open("#c/cons", 1);

	i = create("#e/sysname", 1, 0666);
	if(i < 0)
		error("sysname");
	if(write(i, argv[0], strlen(argv[0])) <= 0)
		error("sysname");
	close(i);

	argv++;
	argc--;	


@@ 114,8 119,6 @@ boot(int ask)
		return;
	}

	print("Connecting to server %s\n", sys);

	/*
	 *  for the bit, we skip all the ether goo
	 */


@@ 239,7 242,12 @@ boot(int ask)
	if(mount(fd, "/", MAFTER|MCREATE, "") < 0)
		error("mount");
	print("success\n");
	execl("/mips/init", "init", 0);
	close(fd);

	if(ask)
		execl("/mips/init", "init", 0);
	else
		execl("/mips/init", "init", "-m", 0);
	error("/mips/init");
}


M power/boot.h => power/boot.h +1077 -757
@@ 1,8 1,8 @@
ulong bootcode[]={
	0x00000407,
	0x000040e8,
	0x00000538,
	0x000010d0,
	0x00004510,
	0x00000610,
	0x000011a8,
	0x00000000,
	0x00001020,
	0x00000000,


@@ 16,740 16,1018 @@ ulong bootcode[]={
	0xafa10004,
	0x0c000415,
	0xafa20008,
	0x0c00071f,
	0x0c000835,
	0xafa10004,
	0x08000411,
	0x00000027,
	0x23bdffec,
	0xafbf0000,
	0xafa0000c,
	0x23c18232,
	0x23c181c2,
	0xafa10004,
	0x0c000e51,
	0x0c000f51,
	0xafa00008,
	0x23c2823a,
	0x23c281ca,
	0xafa20004,
	0x20010001,
	0x0c000e51,
	0x0c000f51,
	0xafa10008,
	0x23c28242,
	0x23c281d2,
	0xafa20004,
	0x20010001,
	0x0c000e51,
	0x0c000f51,
	0xafa10008,
	0x8fa5000c,
	0x2007006d,
	0x8fa2001c,
	0x20060001,
	0x8fa10018,
	0x24430004,
	0x2424ffff,
	0x18800017,
	0x2008002d,
	0x8c610000,
	0x00000027,
	0x80210000,
	0x00000027,
	0x14280011,
	0x00000027,
	0x8c610000,
	0x8fa3001c,
	0x8fa20018,
	0x8c660000,
	0x24630004,
	0x2444ffff,
	0x18800010,
	0x2005002d,
	0x8c620000,
	0x00000027,
	0x80210001,
	0x80420000,
	0x00000027,
	0x14270002,
	0x1445000a,
	0x00000027,
	0x00062825,
	0x2484ffff,
	0x18800007,
	0x24630004,
	0x8c610000,
	0x8c620000,
	0x00000027,
	0x80210000,
	0x80420000,
	0x00000027,
	0x1028fff1,
	0x1045fff8,
	0x00000027,
	0x23c2824a,
	0x23c281da,
	0xafc28002,
	0x23c18254,
	0x23c181e4,
	0x38820001,
	0x10400029,
	0xafc18006,
	0x1040002d,
	0xafc18012,
	0x38820002,
	0x10400020,
	0x10400024,
	0x00000027,
	0x0c000476,
	0xafa50004,
	0x8fc38052,
	0xafa00004,
	0xafa6000c,
	0x0c000470,
	0xafa60008,
	0x8fc38076,
	0x00000027,
	0x18600003,
	0x00000027,
	0x0c000e38,
	0x0c000f42,
	0xafa30004,
	0x8fc28016,
	0x8fc2803e,
	0x00000027,
	0x18400004,
	0x00000027,
	0x8fc18016,
	0x0c000e38,
	0x8fc1803e,
	0x0c000f42,
	0xafa10004,
	0x8fc2801a,
	0x8fc28042,
	0x00000027,
	0x18400004,
	0x00000027,
	0x8fc1801a,
	0x0c000e38,
	0x8fc18042,
	0x0c000f42,
	0xafa10004,
	0xafc0801a,
	0xafc08016,
	0xafc08052,
	0xafc08042,
	0xafc0803e,
	0xafc08076,
	0x20010001,
	0x0c000476,
	0xafa10004,
	0x8fc38052,
	0x08000452,
	0x8fa2000c,
	0x0c000470,
	0xafa20008,
	0x8fc38076,
	0x0800044a,
	0x00000027,
	0x8c610000,
	0x00000027,
	0xafc18006,
	0xafc18012,
	0x8c620004,
	0x0800044e,
	0x08000444,
	0xafc28002,
	0x8c620000,
	0x0800044e,
	0xafc28006,
	0x23bdffdc,
	0x08000444,
	0xafc28012,
	0x23bdff60,
	0xafbf0000,
	0x8fc48002,
	0x8fa20028,
	0x8fa100a4,
	0x00000027,
	0x144001cc,
	0x1020000c,
	0x00000027,
	0x0c00067e,
	0xafa40004,
	0x23c281ec,
	0xafa20004,
	0x8fc18012,
	0x23c2972e,
	0xafa10008,
	0xafa2000c,
	0x2001008c,
	0x0c0007d7,
	0xafa10010,
	0x23c2972e,
	0xafc28012,
	0x8fa100a4,
	0x00000027,
	0x142001a1,
	0x00000027,
	0x8fc18002,
	0x0c00065c,
	0xafa10004,
	0x00012025,
	0x1480000c,
	0xafc4802e,
	0x20010002,
	0xafa10004,
	0x23c28263,
	0xafa20008,
	0x8fc18002,
	0x0c000770,
	0xafa1000c,
	0xafc48052,
	0x20020002,
	0xafa20004,
	0x23c181fc,
	0xafa10008,
	0x8fc28002,
	0x0c000886,
	0xafa2000c,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0024,
	0x23c28275,
	0xafa20004,
	0x8fc18002,
	0x0c00074a,
	0xafa10008,
	0x8fc1802e,
	0x23c3828e,
	0xafa10004,
	0x0c0007ad,
	0x23bd00a0,
	0xafa40004,
	0x23c3820e,
	0x0c0008c3,
	0xafa30008,
	0x14200152,
	0x1420012c,
	0x20040002,
	0x23c28299,
	0x23c28219,
	0xafa20004,
	0x0c000e51,
	0x0c000f51,
	0xafa40008,
	0x04210008,
	0xafc18052,
	0x23c182a1,
	0x0c000656,
	0xafc18076,
	0x23c18221,
	0x0c000634,
	0xafa10004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0024,
	0x23c28337,
	0x0c00074a,
	0x23bd00a0,
	0x23c282b7,
	0x0c000860,
	0xafa20004,
	0xa3c095be,
	0x23c295be,
	0xa3c096e6,
	0x23c296e6,
	0xafa20004,
	0x23c385be,
	0x0c0007eb,
	0x23c386e6,
	0x0c0008f5,
	0xafa30008,
	0x00012025,
	0x8fc18052,
	0x23c385be,
	0x8fc18076,
	0x23c386e6,
	0xafa10004,
	0xafa30008,
	0xafa40020,
	0x0c000e5b,
	0xafa4009c,
	0x0c000f65,
	0xafa4000c,
	0x8fa40020,
	0x8fa3009c,
	0x00000027,
	0x1024000c,
	0x10230008,
	0x00000027,
	0x23c1833e,
	0xafa10004,
	0x0c00074a,
	0xafa40008,
	0x23c18346,
	0x0c000656,
	0x23c182be,
	0x0c000634,
	0xafa10004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0024,
	0x8fc18052,
	0x23c385be,
	0x23bd00a0,
	0x8fc18076,
	0x23c386e6,
	0xafa10004,
	0xafa30008,
	0x20011000,
	0x0c000e56,
	0x0c000f56,
	0xafa1000c,
	0x1c200008,
	0x00000027,
	0x23c28350,
	0x0c000656,
	0x23c282c8,
	0x0c000634,
	0xafa20004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0024,
	0x23c285be,
	0x23bd00a0,
	0x23c286e6,
	0xafa20004,
	0x23c395be,
	0x23c396e6,
	0xafa30008,
	0xafa10020,
	0x0c000b88,
	0xafa1009c,
	0x0c000c92,
	0xafa1000c,
	0x14200019,
	0x00000027,
	0x23c18359,
	0x23c182d1,
	0xafa10004,
	0x8fa20020,
	0x8fa2009c,
	0x00000027,
	0xafa20008,
	0x83c185be,
	0x83c186e6,
	0x00000027,
	0xafa1000c,
	0x83c285bf,
	0x83c286e7,
	0x00000027,
	0xafa20010,
	0x83c185c0,
	0x83c186e8,
	0x00000027,
	0xafa10014,
	0x83c285c1,
	0x0c00074a,
	0x83c286e9,
	0x0c000860,
	0xafa20018,
	0x23c1837c,
	0x0c000656,
	0x23c182f4,
	0x0c000634,
	0xafa10004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0024,
	0x83c295be,
	0x23bd00a0,
	0x83c296e6,
	0x20010001,
	0x10410008,
	0x00000027,
	0x23c28387,
	0x0c000656,
	0x23c282ff,
	0x0c000634,
	0xafa20004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0024,
	0x23c18390,
	0x0c00074a,
	0x23bd00a0,
	0x23c18308,
	0x0c000860,
	0xafa10004,
	0x20020002,
	0xa3c295be,
	0xa3c296e6,
	0x20010076,
	0xa3c195ca,
	0x23c195be,
	0xa3c196f2,
	0x23c196e6,
	0xafa10004,
	0x23c385be,
	0x0c0007eb,
	0x23c386e6,
	0x0c0008f5,
	0xafa30008,
	0x8fc28052,
	0x23c385be,
	0x8fc28076,
	0x23c386e6,
	0xafa20004,
	0xafa30008,
	0xafa10020,
	0x0c000e5b,
	0xafa1009c,
	0x0c000f65,
	0xafa1000c,
	0x8fa30020,
	0x8fa3009c,
	0x00000027,
	0x10230008,
	0x00000027,
	0x23c1839b,
	0x0c000656,
	0x23c18313,
	0x0c000634,
	0xafa10004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0024,
	0x8fc18052,
	0x23c385be,
	0x23bd00a0,
	0x8fc18076,
	0x23c386e6,
	0xafa10004,
	0xafa30008,
	0x20011000,
	0x0c000e56,
	0x0c000f56,
	0xafa1000c,
	0x1c200008,
	0x00000027,
	0x23c283a9,
	0x0c000656,
	0x23c28321,
	0x0c000634,
	0xafa20004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0024,
	0x23c285be,
	0x23bd00a0,
	0x23c286e6,
	0xafa20004,
	0x23c395be,
	0x23c396e6,
	0xafa30008,
	0x0c000b88,
	0x0c000c92,
	0xafa1000c,
	0x14200008,
	0x00000027,
	0x23c183b6,
	0x0c000656,
	0x23c1832e,
	0x0c000634,
	0xafa10004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0024,
	0x83c295be,
	0x23bd00a0,
	0x83c296e6,
	0x20010003,
	0x10410008,
	0x00000027,
	0x23c283c5,
	0x0c000656,
	0x23c2833d,
	0x0c000634,
	0xafa20004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0024,
	0x87c195c2,
	0x23bd00a0,
	0x87c196ea,
	0x00000027,
	0x1020000d,
	0x00000027,
	0x23c283d2,
	0x23c2834a,
	0xafa20004,
	0x87c195c2,
	0x0c00074a,
	0x87c196ea,
	0x0c000860,
	0xafa10008,
	0x23c283dc,
	0x0c000656,
	0x23c28354,
	0x0c000634,
	0xafa20004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0024,
	0x23c183e9,
	0x0c00074a,
	0x23bd00a0,
	0x23c18361,
	0x0c000860,
	0xafa10004,
	0x23c285be,
	0xafa20004,
	0x23c183f1,
	0xafa10008,
	0x8fc28002,
	0x0c000795,
	0xafa2000c,
	0x23c285be,
	0xafa20004,
	0x20030001,
	0xafa30008,
	0x200201b6,
	0x0c000e3d,
	0xafa2000c,
	0x04210004,
	0xafa1001c,
	0x23c183f7,
	0x0c000669,
	0x23c1836a,
	0xafa10004,
	0x23c285be,
	0xafa20004,
	0x23c183fe,
	0xafa10008,
	0x8fc28052,
	0x0c000795,
	0xafa2000c,
	0x23c385be,
	0x0c0007d0,
	0xafa30004,
	0xafa10018,
	0x23c385be,
	0x0c0007d0,
	0xafa30004,
	0xafa10014,
	0x8fa3001c,
	0x23c185be,
	0xafa30004,
	0xafa10008,
	0x8fa30014,
	0x0c000e5b,
	0xafa3000c,
	0x00011025,
	0x8fa10018,
	0x00000027,
	0x10410004,
	0x23c3836c,
	0xafa30008,
	0x0c000f3d,
	0xafa0000c,
	0x04210008,
	0x00000027,
	0x23c28401,
	0x0c000669,
	0xafa20004,
	0x8fa1001c,
	0x0c000e38,
	0x23c1836e,
	0x0c000634,
	0xafa10004,
	0x23c18407,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd00a0,
	0x8fc18076,
	0x23c38373,
	0xafa10004,
	0x20030001,
	0xafa30008,
	0x200101b6,
	0x0c000e3d,
	0x20010006,
	0xafa1000c,
	0x04210004,
	0xafa1001c,
	0x23c2840f,
	0x0c000669,
	0x23c38375,
	0x0c000f4c,
	0xafa30010,
	0x04210008,
	0x00000027,
	0x23c18376,
	0x0c000634,
	0xafa10004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd00a0,
	0x8fc28076,
	0x0c000f42,
	0xafa20004,
	0x23c185be,
	0x23a1001c,
	0xafa10004,
	0x23c28416,
	0x23c2837c,
	0xafa20008,
	0x8fc18052,
	0x0c000795,
	0x8fa100a8,
	0x0c0008ab,
	0xafa1000c,
	0x23c285be,
	0x0c0007d0,
	0x23c2838a,
	0xafa20004,
	0xafa10018,
	0x23c385be,
	0x0c0007d0,
	0xafa30004,
	0xafa10014,
	0x8fa3001c,
	0x23c185be,
	0xafa30004,
	0x23a1001c,
	0x0c000860,
	0xafa10008,
	0x8fa30014,
	0x0c000e5b,
	0xafa3000c,
	0x00011025,
	0x8fa10018,
	0x00000027,
	0x10410004,
	0x00000027,
	0x23c28419,
	0x0c000669,
	0xafa20004,
	0x8fa1001c,
	0x0c000e38,
	0x23a1001c,
	0xafa10004,
	0x23c2841f,
	0x0c00074a,
	0xafa20004,
	0x23c28428,
	0xafa20004,
	0x23c3842a,
	0xafa30008,
	0x0c000e33,
	0xafa0000c,
	0x04210004,
	0x00000027,
	0x23c1842c,
	0x0c000669,
	0x0c000f51,
	0xafa00008,
	0xafc18076,
	0x0421000a,
	0x23a4001c,
	0x23c18390,
	0xafa10004,
	0x8fc18052,
	0x23c38431,
	0xafa40008,
	0xafa4000c,
	0x20020080,
	0x0c0007d7,
	0xafa20010,
	0x0800058c,
	0x00000027,
	0x0c0006f2,
	0xafa10004,
	0xafa30008,
	0x20010006,
	0xafa1000c,
	0x23c38433,
	0x0c000e4c,
	0xafa30010,
	0x04210004,
	0x00000027,
	0x23c18434,
	0x0c000669,
	0x23c18399,
	0x0c000634,
	0xafa10004,
	0x23c2843a,
	0x0c00074a,
	0x8fc28076,
	0x0c000f42,
	0xafa20004,
	0x23c18443,
	0x23c183a2,
	0xafa10004,
	0x23c2844e,
	0x8fc28012,
	0x0c000860,
	0xafa20008,
	0x0c0007df,
	0xafa0000c,
	0x23c18453,
	0x0c000669,
	0x8fc48012,
	0x00000027,
	0xafc48012,
	0xafa40004,
	0x0c000f51,
	0xafa00008,
	0x0421000c,
	0xafc18076,
	0x23c283a8,
	0xafa20004,
	0x8fc18012,
	0x23c2972e,
	0xafa10008,
	0xafa2000c,
	0x2001008c,
	0x0c0007d7,
	0xafa10010,
	0x080005ad,
	0x23c4972e,
	0x0c000740,
	0xafa10004,
	0x23c283b1,
	0x0c000634,
	0xafa20004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0024,
	0x23c182b1,
	0x23bd00a0,
	0x23c18231,
	0xafa10004,
	0x0c000e51,
	0x0c000f51,
	0xafa40008,
	0x04210008,
	0xafc1801a,
	0x23c282ba,
	0x0c000656,
	0xafc1803e,
	0x23c2823a,
	0x0c000634,
	0xafa20004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0024,
	0x23bd00a0,
	0xafa10004,
	0x23c382cb,
	0x23c3824b,
	0xafa30008,
	0x2002000d,
	0x0c000e5b,
	0x0c000f65,
	0xafa2000c,
	0x04210008,
	0x00000027,
	0x23c182d9,
	0x0c000656,
	0x23c18259,
	0x0c000634,
	0xafa10004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0024,
	0x8fc1801a,
	0x23c382e7,
	0x23bd00a0,
	0x8fc1803e,
	0x23c38267,
	0xafa10004,
	0xafa30008,
	0x2001000c,
	0x0c000e5b,
	0x0c000f65,
	0xafa1000c,
	0x04210008,
	0x00000027,
	0x23c282f4,
	0x0c000656,
	0x23c28274,
	0x0c000634,
	0xafa20004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0024,
	0x23c28301,
	0x23bd00a0,
	0x23c28281,
	0xafa20004,
	0x20030002,
	0x0c000e51,
	0x0c000f51,
	0xafa30008,
	0x04210008,
	0xafc18052,
	0x23c1830b,
	0x0c000656,
	0xafc18076,
	0x23c1828b,
	0x0c000634,
	0xafa10004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0024,
	0x23c1831d,
	0x23bd00a0,
	0x23c1829d,
	0xafa10004,
	0x20030002,
	0x0c000e51,
	0x0c000f51,
	0xafa30008,
	0x04210008,
	0xafc18016,
	0x23c28326,
	0x0c000656,
	0xafc1803e,
	0x23c282a6,
	0x0c000634,
	0xafa20004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd00a0,
	0x8fc38052,
	0x0c0008e6,
	0xafa30004,
	0xafa10018,
	0x8fc3803e,
	0x00000027,
	0xafa30004,
	0x8fc28052,
	0x00000027,
	0xafa20008,
	0x8fa30018,
	0x0c000f65,
	0xafa3000c,
	0x0421fe8c,
	0x00000027,
	0x8fc18052,
	0x0c000634,
	0xafa10004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd00a0,
	0x23c181f5,
	0xafa10004,
	0x8fc28002,
	0x23c180b2,
	0xafa20008,
	0xafa1000c,
	0x20020038,
	0x0c0007d7,
	0xafa20010,
	0x23c480b2,
	0xafc48002,
	0x0c00065c,
	0xafa40004,
	0x08000489,
	0x00012025,
	0x23bdffac,
	0xafbf0000,
	0xafa00004,
	0x23a10014,
	0x0c000f47,
	0xafa10008,
	0x20020002,
	0xafa20004,
	0x23c183c6,
	0xafa10008,
	0x8fa20058,
	0x23a10014,
	0xafa2000c,
	0x0c000886,
	0xafa10010,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0054,
	0x23bdffac,
	0xafbf0000,
	0xafa00004,
	0x23a20014,
	0x0c000f47,
	0xafa20008,
	0x20010002,
	0xafa10004,
	0x23c283d4,
	0xafa20008,
	0x8fa10058,
	0x23a20014,
	0xafa1000c,
	0x0c000886,
	0xafa20010,
	0x0c000844,
	0xafa00004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0054,
	0x23bdfff0,
	0xafbf0000,
	0x8fa20014,
	0x23c383e2,
	0xafa20004,
	0x0c0008c3,
	0xafa30008,
	0x10200025,
	0x00000027,
	0x8fa20014,
	0x23c383e4,
	0xafa20004,
	0x0c0008c3,
	0xafa30008,
	0x1020001e,
	0x00000027,
	0x23c4807a,
	0x8c820000,
	0x00000027,
	0x10400015,
	0x00000027,
	0xafa4000c,
	0x8c820000,
	0x00000027,
	0xafa20004,
	0x8fa30014,
	0x0c0008c3,
	0xafa30008,
	0x8fa4000c,
	0x14200006,
	0x00000027,
	0x8c810004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0010,
	0x24840008,
	0x8c820000,
	0x00000027,
	0x1440ffed,
	0x00000027,
	0x8fa20000,
	0x23bd0010,
	0x00400008,
	0x00000825,
	0x23c4807a,
	0x8c810000,
	0x00000027,
	0x1020000e,
	0x00000027,
	0x23c283e9,
	0xafa20004,
	0xafa4000c,
	0x8c810000,
	0x0c000860,
	0xafa10008,
	0x8fa2000c,
	0x00000027,
	0x24440008,
	0x8c810000,
	0x00000027,
	0x1420fff4,
	0x00000027,
	0x8fa20000,
	0x23bd0010,
	0x00400008,
	0x00000825,
	0x23bdffe8,
	0xafbf0000,
	0x8fa1001c,
	0x00000027,
	0xafa10004,
	0x8fa30024,
	0x00000027,
	0xafa30008,
	0x0c000f5b,
	0xafa0000c,
	0x04210008,
	0x00000027,
	0x23c183ed,
	0x0c000634,
	0xafa10004,
	0x8fa20000,
	0x23bd0018,
	0x00400008,
	0x2001ffff,
	0x8fa10020,
	0x00000027,
	0xafa10004,
	0x8fa30028,
	0x00000027,
	0xafa30008,
	0x0c000f5b,
	0xafa0000c,
	0x8fa4002c,
	0x00011025,
	0x8fa10028,
	0x00000027,
	0x10410008,
	0x00000027,
	0x23c283fe,
	0x0c000634,
	0xafa20004,
	0x8fa20000,
	0x23bd0018,
	0x00400008,
	0x2001ffff,
	0x18800026,
	0xafa4002c,
	0x8fa2001c,
	0x23c386e6,
	0xafa20004,
	0xafa30008,
	0x20021000,
	0x0c000f56,
	0xafa2000c,
	0x1c200008,
	0x00000027,
	0x23c2840d,
	0x0c000634,
	0xafa20004,
	0x8fa20000,
	0x23bd0018,
	0x00400008,
	0x2001ffff,
	0x8fa20020,
	0x23c386e6,
	0xafa20004,
	0xafa30008,
	0xafa10014,
	0x0c000f65,
	0xafa1000c,
	0x8fa40014,
	0x00000027,
	0x10240008,
	0x00000027,
	0x23c1841e,
	0x0c000634,
	0xafa10004,
	0x8fa20000,
	0x23bd0018,
	0x00400008,
	0x2001ffff,
	0x8fa2002c,
	0x080006c7,
	0x00442023,
	0x8fa20000,
	0x23bd0018,
	0x00400008,
	0x00000825,
	0x23bdffe4,
	0xafbf0000,
	0x8fa10020,
	0x23c386e6,
	0xafa10004,
	0xafa30008,
	0x20010fff,
	0x0c000f56,
	0xafa1000c,
	0x1c200005,
	0x00000027,
	0x8fa20000,
	0x23bd001c,
	0x00400008,
	0x2001ffff,
	0x23c286e6,
	0xafa10014,
	0x00411021,
	0xa0400000,
	0x23c1842d,
	0xafa10004,
	0x20030001,
	0x0c000f51,
	0xafa30008,
	0x04210008,
	0x00000027,
	0x23c28434,
	0x0c000634,
	0xafa20004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd001c,
	0x8fc58116,
	0xafa10018,
	0xafa10004,
	0xafa50010,
	0xafa50008,
	0x0c000f5b,
	0xafa0000c,
	0x8fa40018,
	0x00011025,
	0x8fa10010,
	0x00000027,
	0x10410007,
	0x00000027,
	0x0c000f42,
	0xafa40004,
	0x8fa20000,
	0x23bd001c,
	0x00400008,
	0x2001ffff,
	0xafa40004,
	0x23c386e6,
	0xafa30008,
	0x8fa20014,
	0x00000027,
	0x24420001,
	0x0c000f65,
	0xafa2000c,
	0x8fa40018,
	0x8fa30014,
	0x00000027,
	0x24630001,
	0x10230007,
	0x00000027,
	0x0c000f42,
	0xafa40004,
	0x8fa20000,
	0x23bd001c,
	0x00400008,
	0x2001ffff,
	0x0c000f42,
	0xafa40004,
	0x8fa20000,
	0x23bd001c,
	0x00400008,
	0x00000825,
	0x23bdffe0,
	0xafbf0000,
	0x23c28446,
	0xafa20004,
	0x20030001,
	0x0c000f51,
	0xafa30008,
	0x04210008,
	0xafa10018,
	0x23c1844d,
	0x0c000634,
	0xafa10004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0020,
	0x8fa10024,
	0x23c38696,
	0xafa10004,
	0xafa30008,
	0x20010050,
	0x0c000f56,
	0xafa1000c,
	0x1c20000b,
	0x00000027,
	0x23c2845f,
	0x0c000634,
	0xafa20004,
	0x8fa10018,
	0x0c000f42,
	0xafa10004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0024,
	0x8fc3802e,
	0x0c0007d0,
	0xafa30004,
	0xafa10018,
	0x8fc38016,
	0x00000027,
	0xafa30004,
	0x8fc2802e,
	0x23bd0020,
	0x23c28474,
	0xafa20004,
	0x8fc186ae,
	0x0c000860,
	0xafa10008,
	0x8fa10024,
	0x00000027,
	0xafa20008,
	0xafa10004,
	0x8fa30018,
	0x0c000e5b,
	0xafa3000c,
	0x0421fe66,
	0x20010050,
	0xafa30008,
	0xafa1000c,
	0x8fc386be,
	0x00000027,
	0x8fc1802e,
	0x0c000656,
	0xafa10004,
	0x8fa20000,
	0xafa30010,
	0x8fc186ae,
	0x0c00069f,
	0xafa10014,
	0x0421000b,
	0x00000027,
	0x00400008,
	0x23bd0024,
	0x23c2825c,
	0x23c28478,
	0x0c000634,
	0xafa20004,
	0xafa40008,
	0x23c2808e,
	0xafa2000c,
	0x20010038,
	0x0c0006c1,
	0xafa10010,
	0x23c4808e,
	0xafc48002,
	0x0c00067e,
	0xafa40004,
	0x08000480,
	0x00012025,
	0x23bdffac,
	0xafbf0000,
	0xafa00004,
	0x23a20014,
	0x0c000e42,
	0xafa20008,
	0x20010002,
	0x8fa10018,
	0x0c000f42,
	0xafa10004,
	0x23c2845e,
	0xafa20008,
	0x8fa10058,
	0x23a20014,
	0xafa1000c,
	0x0c000770,
	0xafa20010,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0054,
	0x23bdffac,
	0xafbf0000,
	0xafa00004,
	0x23a10014,
	0x0c000e42,
	0xafa10008,
	0x20020002,
	0x23bd0020,
	0x23c2848d,
	0xafa20004,
	0x23c1846c,
	0x8fc186b2,
	0x0c000860,
	0xafa10008,
	0x8fa20058,
	0x23a10014,
	0xafa2000c,
	0x0c000770,
	0xafa10010,
	0x0c00072e,
	0xafa00004,
	0x8fa20000,
	0x8fa10024,
	0x00000027,
	0x00400008,
	0x23bd0054,
	0x23bdfff0,
	0xafbf0000,
	0x8fa10014,
	0x23c3847a,
	0xafa10004,
	0x0c0007ad,
	0xafa30008,
	0x10200025,
	0x8fa30018,
	0x00000027,
	0x8fa20014,
	0x23c3847c,
	0xafa20004,
	0x0c0007ad,
	0xafa30008,
	0x1020001e,
	0x8fc186ae,
	0x00000027,
	0x23c48056,
	0x8c820000,
	0x00000027,
	0x10400015,
	0x24210050,
	0xafa1000c,
	0x8fc386be,
	0x8fc186ae,
	0x00000027,
	0xafa4000c,
	0x8c820000,
	0x00611821,
	0xafa30010,
	0x8fc186b2,
	0x0c00069f,
	0xafa10014,
	0x0421000b,
	0x00000027,
	0x23c28491,
	0x0c000634,
	0xafa20004,
	0x8fa30014,
	0x0c0007ad,
	0xafa30008,
	0x8fa4000c,
	0x14200006,
	0x00000027,
	0x8c810004,
	0x8fa10018,
	0x0c000f42,
	0xafa10004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0010,
	0x24840008,
	0x8c820000,
	0x00000027,
	0x1440ffed,
	0x00000027,
	0x23bd0020,
	0x23c284a6,
	0xafa20004,
	0x8fc186b6,
	0x0c000860,
	0xafa10008,
	0x8fa20018,
	0x0c000f42,
	0xafa20004,
	0x23c284aa,
	0xafa20004,
	0x20030001,
	0x0c000f51,
	0xafa30008,
	0x04210008,
	0xafa10018,
	0x23c184b2,
	0x0c000634,
	0xafa10004,
	0x8fa20000,
	0x23bd0010,
	0x00400008,
	0x00000825,
	0x23c48056,
	0x8c810000,
	0x00000027,
	0x1020000e,
	0x00000027,
	0x23c28481,
	0x00400008,
	0x23bd0020,
	0x23c284c5,
	0xafa20004,
	0xafa4000c,
	0x8c810000,
	0x0c00074a,
	0x8fc186ba,
	0x0c000860,
	0xafa10008,
	0x8fa2000c,
	0x00000027,
	0x24440008,
	0x8c810000,
	0x00000027,
	0x1420fff4,
	0x200203e8,
	0x0c000f60,
	0xafa20004,
	0x8fa20018,
	0x23c38696,
	0xafa20004,
	0x24630024,
	0xafa30008,
	0x20020004,
	0x0c000f65,
	0xafa2000c,
	0x20030004,
	0x10230007,
	0x00000027,
	0x23c184d4,
	0x0c000634,
	0xafa10004,
	0x8fa20018,
	0x0c000f42,
	0xafa20004,
	0x8fa20000,
	0x23bd0010,
	0x00000027,
	0x00400008,
	0x00000825,
	0x23bd0020,
	0x23bdffec,
	0xafbf0000,
	0x23c18485,
	0xafa10004,
	0x8fa20018,
	0x23c284e7,
	0xafa20004,
	0x8fa10018,
	0x00000027,
	0xafa20008,
	0x8fa1001c,
	0x0c00074a,
	0xafa1000c,
	0xafa10008,
	0x8fa2001c,
	0x0c000860,
	0xafa2000c,
	0xafa00004,
	0x8fa10020,
	0x8fa20020,
	0x00000027,
	0xafa10008,
	0xafa20008,
	0x8fa30024,
	0x0c000e56,
	0x0c000f56,
	0xafa3000c,
	0x14200003,
	0x00012025,
	0x080006c3,
	0x080007d9,
	0x00000027,
	0x04210006,
	0xafa10010,
	0x23c2848e,
	0x0c000669,
	0xafa20004,
	0x23c184f0,
	0x0c000647,
	0xafa10004,
	0x8fa40010,
	0x00000027,
	0x20020001,
	0x1482000c,
	0x20010001,
	0x1481000c,
	0x00000027,
	0x8fa10020,
	0x8fa20020,
	0x00000027,
	0xafa10004,
	0x8fa2001c,
	0x0c0007c3,
	0xafa20008,
	0xafa20004,
	0x8fa1001c,
	0x0c0008d9,
	0xafa10008,
	0x8fa40010,
	0x8fa20000,
	0x23bd0014,
	0x00400008,
	0x00040825,
	0x8fa20020,
	0x8fa10020,
	0x00000027,
	0x00820821,
	0xa020ffff,
	0x00811021,
	0xa040ffff,
	0x8fa20000,
	0x23bd0014,
	0x00400008,


@@ 758,7 1036,7 @@ ulong bootcode[]={
	0x00002025,
	0x28810021,
	0x10200011,
	0x23c5853a,
	0x23c58612,
	0x00040880,
	0x00250821,
	0x8c210000,


@@ 783,7 1061,7 @@ ulong bootcode[]={
	0x00001825,
	0x28610021,
	0x1020000d,
	0x23c4853a,
	0x23c48612,
	0x00030880,
	0x00240821,
	0x8c210000,


@@ 804,10 1082,10 @@ ulong bootcode[]={
	0x00000027,
	0x14200003,
	0x00000027,
	0x0c00072e,
	0x0c000844,
	0xafa00004,
	0x23c2803a,
	0x0c00072e,
	0x23c2805e,
	0x0c000844,
	0xafa20004,
	0x8fa20000,
	0x00000027,


@@ 815,7 1093,7 @@ ulong bootcode[]={
	0x23bd0008,
	0x23bdfff0,
	0xafbf0000,
	0x23c5853a,
	0x23c58612,
	0x20030020,
	0x04600010,
	0x00000027,


@@ 831,11 1109,11 @@ ulong bootcode[]={
	0x0080f809,
	0xac200000,
	0x8fa3000c,
	0x23c5853a,
	0x08000732,
	0x23c58612,
	0x08000848,
	0x2463ffff,
	0x8fa20014,
	0x0c000e2e,
	0x0c000f38,
	0xafa20004,
	0x8fa20000,
	0x00000027,


@@ 851,7 1129,7 @@ ulong bootcode[]={
	0x23a31020,
	0xafa2000c,
	0x24630004,
	0x0c000e98,
	0x0c000fa2,
	0xafa30010,
	0x23a5001c,
	0x00012025,


@@ 859,19 1137,19 @@ ulong bootcode[]={
	0xafa10004,
	0xafa50008,
	0x00850823,
	0x0c000e5b,
	0x0c000f65,
	0xafa1000c,
	0xafa10014,
	0x0421000c,
	0x00012025,
	0x8fc2800a,
	0x8fc28016,
	0x00000027,
	0x24420001,
	0x2841000a,
	0x14200006,
	0xafc2800a,
	0xafc28016,
	0x20010001,
	0x0c00071f,
	0x0c000835,
	0xafa10004,
	0x8fa40014,
	0x00000027,


@@ 889,26 1167,26 @@ ulong bootcode[]={
	0x23a31024,
	0xafa1000c,
	0x24630004,
	0x0c000e98,
	0x0c000fa2,
	0xafa30010,
	0x8fa21020,
	0x23a5001c,
	0xafa20004,
	0xafa50008,
	0x00251023,
	0x0c000e5b,
	0x0c000f65,
	0xafa2000c,
	0xafa10014,
	0x0421000c,
	0x00012025,
	0x8fc1800a,
	0x8fc18016,
	0x00000027,
	0x24210001,
	0x2822000a,
	0x14400006,
	0xafc1800a,
	0xafc18016,
	0x20020001,
	0x0c00071f,
	0x0c000835,
	0xafa20004,
	0x8fa40014,
	0x00000027,


@@ 919,7 1197,7 @@ ulong bootcode[]={
	0x23bdffe4,
	0xafbf0000,
	0x8fa40020,
	0x8fc2800e,
	0x8fc2801a,
	0x24831000,
	0xafa20014,
	0xafa40004,


@@ 928,11 1206,11 @@ ulong bootcode[]={
	0x23a30024,
	0xafa2000c,
	0x24630004,
	0x0c000e98,
	0x0c000fa2,
	0xafa30010,
	0x8fa20014,
	0x00000027,
	0xafc2800e,
	0xafc2801a,
	0x8fa20020,
	0x00000027,
	0x00220823,


@@ 990,18 1268,6 @@ ulong bootcode[]={
	0x00220823,
	0x03e00008,
	0x23bd0004,
	0x23bdfff4,
	0xafbf0000,
	0x8fa20010,
	0x23a30010,
	0xafa20004,
	0x24630004,
	0x0c000e47,
	0xafa30008,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd000c,
	0x23bdffec,
	0xafbf0000,
	0x8fa40018,


@@ 1039,10 1305,10 @@ ulong bootcode[]={
	0x38220003,
	0x1040000a,
	0x00000027,
	0x23c180ca,
	0x23c1801e,
	0xafa10004,
	0x80820000,
	0x0c00074a,
	0x0c000860,
	0xafa20008,
	0x8fa20000,
	0x23bd0014,


@@ 1085,7 1351,7 @@ ulong bootcode[]={
	0xafa10004,
	0x24810008,
	0xafa10008,
	0x0c001370,
	0x0c00147a,
	0xafa6000c,
	0x8fa10010,
	0x2002001c,


@@ 1096,7 1362,7 @@ ulong bootcode[]={
	0x00000027,
	0x24210024,
	0xafa10008,
	0x0c001370,
	0x0c00147a,
	0xafa2000c,
	0x8fa10010,
	0x8fa2001c,


@@ 1115,7 1381,7 @@ ulong bootcode[]={
	0x3822000d,
	0x10400003,
	0x00000027,
	0x08000810,
	0x0800091a,
	0x00000027,
	0x84810002,
	0x00000027,


@@ 1206,7 1472,7 @@ ulong bootcode[]={
	0xafa20004,
	0x2482000c,
	0xafa20008,
	0x0c001370,
	0x0c00147a,
	0xafa6000c,
	0x8fa20010,
	0x00000027,


@@ 1235,7 1501,7 @@ ulong bootcode[]={
	0x38220012,
	0x10400003,
	0x00000027,
	0x08000810,
	0x0800091a,
	0x00000027,
	0x84820002,
	0x24a10002,


@@ 1248,7 1514,7 @@ ulong bootcode[]={
	0xafa10004,
	0x2481000c,
	0xafa10008,
	0x0c001370,
	0x0c00147a,
	0xafa6000c,
	0x8fa60018,
	0x8fa10010,


@@ 1307,7 1573,7 @@ ulong bootcode[]={
	0x38220016,
	0x10400003,
	0x00000027,
	0x08000810,
	0x0800091a,
	0x00000027,
	0x84810002,
	0x00000027,


@@ 1348,7 1614,7 @@ ulong bootcode[]={
	0x00000027,
	0xafa20008,
	0x8c81000c,
	0x0c001370,
	0x0c00147a,
	0xafa1000c,
	0x8fa20018,
	0x8fa10010,


@@ 1389,7 1655,7 @@ ulong bootcode[]={
	0x00000027,
	0xafa10008,
	0x8c82000c,
	0x0c001370,
	0x0c00147a,
	0xafa2000c,
	0x8fa10018,
	0x8fa20010,


@@ 1493,7 1759,7 @@ ulong bootcode[]={
	0x3822001b,
	0x1040fe89,
	0x00000027,
	0x08000810,
	0x0800091a,
	0x00000027,
	0x84820002,
	0x00000027,


@@ 1518,7 1784,7 @@ ulong bootcode[]={
	0x3822001f,
	0x1040fe70,
	0x00000027,
	0x08000810,
	0x0800091a,
	0x00000027,
	0x84810002,
	0x24a20002,


@@ 1531,7 1797,7 @@ ulong bootcode[]={
	0xafa20004,
	0x24820008,
	0xafa20008,
	0x0c001370,
	0x0c00147a,
	0xafa7000c,
	0x8fa20010,
	0x00000027,


@@ 1561,7 1827,7 @@ ulong bootcode[]={
	0xafa20004,
	0x24820008,
	0xafa20008,
	0x0c001370,
	0x0c00147a,
	0xafa7000c,
	0x8fa20010,
	0x00000027,


@@ 1608,7 1874,7 @@ ulong bootcode[]={
	0x38220023,
	0x10400003,
	0x00000027,
	0x08000810,
	0x0800091a,
	0x00000027,
	0x84820002,
	0x00000027,


@@ 1628,7 1894,7 @@ ulong bootcode[]={
	0xafa20004,
	0x24820008,
	0xafa20008,
	0x0c001370,
	0x0c00147a,
	0xafa6000c,
	0x8fa20010,
	0x00000027,


@@ 1679,7 1945,7 @@ ulong bootcode[]={
	0xafa20004,
	0x24820008,
	0xafa20008,
	0x0c001370,
	0x0c00147a,
	0xafa7000c,
	0x8fa20010,
	0x00000027,


@@ 1700,7 1966,7 @@ ulong bootcode[]={
	0x38220027,
	0x1040ff00,
	0x00000027,
	0x08000810,
	0x0800091a,
	0x00000027,
	0x84820002,
	0x00000027,


@@ 1742,7 2008,7 @@ ulong bootcode[]={
	0x00000027,
	0xafa20008,
	0x8c81000c,
	0x0c001370,
	0x0c00147a,
	0xafa1000c,
	0x8fa20018,
	0x8fa10010,


@@ 1784,7 2050,7 @@ ulong bootcode[]={
	0x00000027,
	0xafa10008,
	0x8c82000c,
	0x0c001370,
	0x0c00147a,
	0xafa2000c,
	0x8fa10018,
	0x8fa20010,


@@ 1807,7 2073,7 @@ ulong bootcode[]={
	0x8fa10018,
	0x00000027,
	0xafa10008,
	0x0c001370,
	0x0c00147a,
	0xafa2000c,
	0x8fa30018,
	0x8fa10010,


@@ 1966,10 2232,10 @@ ulong bootcode[]={
	0x38410003,
	0x1020000a,
	0x00000027,
	0x23c280d8,
	0x23c2802c,
	0xafa20004,
	0x80a10000,
	0x0c00074a,
	0x0c000860,
	0xafa10008,
	0x8fa20000,
	0x23bd0014,


@@ 2000,7 2266,7 @@ ulong bootcode[]={
	0x80210000,
	0x00000027,
	0xa0a1000c,
	0x08000bbe,
	0x08000cc8,
	0x24840001,
	0x90820000,
	0x90810001,


@@ 2012,7 2278,7 @@ ulong bootcode[]={
	0xafa20004,
	0xafa40010,
	0xafa40008,
	0x0c001370,
	0x0c00147a,
	0xafa6000c,
	0x8fa10010,
	0x8fa2001c,


@@ 2022,10 2288,10 @@ ulong bootcode[]={
	0xafa40010,
	0xafa40008,
	0x2002001c,
	0x0c001370,
	0x0c00147a,
	0xafa2000c,
	0x8fa10010,
	0x08000bbe,
	0x08000cc8,
	0x2424001c,
	0x3841000b,
	0x10200023,


@@ 2036,7 2302,7 @@ ulong bootcode[]={
	0x3841000d,
	0x10200003,
	0x00000027,
	0x08000baf,
	0x08000cb9,
	0x00000027,
	0x90810000,
	0x90820001,


@@ 2049,7 2315,7 @@ ulong bootcode[]={
	0x24840002,
	0x00021200,
	0x00220825,
	0x08000bbe,
	0x08000cc8,
	0xa4a10004,
	0x90820000,
	0x90810001,


@@ 2062,7 2328,7 @@ ulong bootcode[]={
	0x24840002,
	0x00010a00,
	0x00411025,
	0x08000bbe,
	0x08000cc8,
	0xa4a2000a,
	0x90810000,
	0x90820001,


@@ 2087,7 2353,7 @@ ulong bootcode[]={
	0x00021600,
	0x00220825,
	0x24840004,
	0x08000bbe,
	0x08000cc8,
	0xaca10010,
	0x90820000,
	0x90810001,


@@ 2099,10 2365,10 @@ ulong bootcode[]={
	0xafa20004,
	0xafa40010,
	0xafa40008,
	0x0c001370,
	0x0c00147a,
	0xafa6000c,
	0x8fa10010,
	0x08000bbe,
	0x08000cc8,
	0x2424001c,
	0x2441ffed,
	0x1c20003c,


@@ 2121,7 2387,7 @@ ulong bootcode[]={
	0x38410012,
	0x10200003,
	0x00000027,
	0x08000baf,
	0x08000cb9,
	0x00000027,
	0x90820000,
	0x90810001,


@@ 2133,7 2399,7 @@ ulong bootcode[]={
	0xafa20004,
	0xafa40010,
	0xafa40008,
	0x0c001370,
	0x0c00147a,
	0xafa6000c,
	0x8fa5001c,
	0x8fa10010,


@@ 2153,7 2419,7 @@ ulong bootcode[]={
	0x24810004,
	0x24240001,
	0x80210000,
	0x08000bbe,
	0x08000cc8,
	0xa0a10028,
	0x90820000,
	0x90810001,


@@ 2164,7 2430,7 @@ ulong bootcode[]={
	0x24810002,
	0x24240001,
	0x80210000,
	0x08000bbe,
	0x08000cc8,
	0xa0a10028,
	0x38410014,
	0x1020003b,


@@ 2175,7 2441,7 @@ ulong bootcode[]={
	0x38410016,
	0x10200003,
	0x00000027,
	0x08000baf,
	0x08000cb9,
	0x00000027,
	0x90820000,
	0x90810001,


@@ 2203,7 2469,7 @@ ulong bootcode[]={
	0xaca2000c,
	0xaca40010,
	0x8ca2000c,
	0x08000bbe,
	0x08000cc8,
	0x00822021,
	0x90810000,
	0x90820001,


@@ 2225,7 2491,7 @@ ulong bootcode[]={
	0xaca1000c,
	0xaca40010,
	0x8ca1000c,
	0x08000bbe,
	0x08000cc8,
	0x00812021,
	0x90820000,
	0x90810001,


@@ 2250,7 2516,7 @@ ulong bootcode[]={
	0x24840002,
	0x00010a00,
	0x00411025,
	0x08000bbe,
	0x08000cc8,
	0xaca2000c,
	0x90820000,
	0x90810001,


@@ 2269,7 2535,7 @@ ulong bootcode[]={
	0x24840002,
	0x00010a00,
	0x00411025,
	0x08000bbe,
	0x08000cc8,
	0xaca2000c,
	0x2441ffe0,
	0x1c200059,


@@ 2293,14 2559,14 @@ ulong bootcode[]={
	0x3841001b,
	0x1020ff02,
	0x00000027,
	0x08000baf,
	0x08000cb9,
	0x00000027,
	0x90810000,
	0x90820001,
	0x24840002,
	0x00021200,
	0x00220825,
	0x08000bbe,
	0x08000cc8,
	0xa4a10002,
	0x3841001d,
	0x10200018,


@@ 2311,7 2577,7 @@ ulong bootcode[]={
	0x3841001f,
	0x1020fef0,
	0x00000027,
	0x08000baf,
	0x08000cb9,
	0x00000027,
	0x90810000,
	0x90820001,


@@ 2323,10 2589,10 @@ ulong bootcode[]={
	0xafa10004,
	0xafa40010,
	0xafa40008,
	0x0c001370,
	0x0c00147a,
	0xafa7000c,
	0x8fa20010,
	0x08000bbe,
	0x08000cc8,
	0x24440040,
	0x90820000,
	0x90810001,


@@ 2344,10 2610,10 @@ ulong bootcode[]={
	0xafa20004,
	0xafa40010,
	0xafa40008,
	0x0c001370,
	0x0c00147a,
	0xafa7000c,
	0x8fa10010,
	0x08000bbe,
	0x08000cc8,
	0x24240040,
	0x90810000,
	0x90820001,


@@ 2360,7 2626,7 @@ ulong bootcode[]={
	0x24840002,
	0x00021200,
	0x00220825,
	0x08000bbe,
	0x08000cc8,
	0xa4a10004,
	0x2441ffdc,
	0x1c200045,


@@ 2376,7 2642,7 @@ ulong bootcode[]={
	0x38410023,
	0x10200003,
	0x00000027,
	0x08000baf,
	0x08000cb9,
	0x00000027,
	0x90820000,
	0x90810001,


@@ 2394,10 2660,10 @@ ulong bootcode[]={
	0xafa20004,
	0xafa40010,
	0xafa40008,
	0x0c001370,
	0x0c00147a,
	0xafa6000c,
	0x8fa10010,
	0x08000bbe,
	0x08000cc8,
	0x2424001c,
	0x90810000,
	0x90820001,


@@ 2410,7 2676,7 @@ ulong bootcode[]={
	0x24840002,
	0x00021200,
	0x00220825,
	0x08000bbe,
	0x08000cc8,
	0xa4a10008,
	0x90820000,
	0x90810001,


@@ 2428,10 2694,10 @@ ulong bootcode[]={
	0xafa20004,
	0xafa40010,
	0xafa40008,
	0x0c001370,
	0x0c00147a,
	0xafa7000c,
	0x8fa10010,
	0x08000bbe,
	0x08000cc8,
	0x24240040,
	0x38410025,
	0x10200027,


@@ 2442,7 2708,7 @@ ulong bootcode[]={
	0x38410027,
	0x1020ff43,
	0x00000027,
	0x08000baf,
	0x08000cb9,
	0x00000027,
	0x90810000,
	0x90820001,


@@ 2472,7 2738,7 @@ ulong bootcode[]={
	0x24440001,
	0xaca40010,
	0x8ca2000c,
	0x08000bbe,
	0x08000cc8,
	0x00822021,
	0x90820000,
	0x90810001,


@@ 2496,7 2762,7 @@ ulong bootcode[]={
	0x24240001,
	0xaca40010,
	0x8ca1000c,
	0x08000bbe,
	0x08000cc8,
	0x00812021,
	0x23bdffec,
	0xafbf0000,


@@ 2507,7 2773,7 @@ ulong bootcode[]={
	0xafa40010,
	0xafa40008,
	0x2001001c,
	0x0c001370,
	0x0c00147a,
	0xafa1000c,
	0x8fa4001c,
	0x8fa20010,


@@ 2621,32 2887,32 @@ ulong bootcode[]={
	0x03e00008,
	0x23bd0004,
	0x23bdfffc,
	0x20010016,
	0x20010006,
	0x0000000c,
	0x03e00008,
	0x23bd0004,
	0x23bdfffc,
	0x20010006,
	0x2001000d,
	0x0000000c,
	0x03e00008,
	0x23bd0004,
	0x23bdfffc,
	0x20010007,
	0x2001000e,
	0x0000000c,
	0x03e00008,
	0x23bd0004,
	0x23bdfffc,
	0x2001000d,
	0x2001000f,
	0x0000000c,
	0x03e00008,
	0x23bd0004,
	0x23bdfffc,
	0x2001000e,
	0x20010010,
	0x0000000c,
	0x03e00008,
	0x23bd0004,
	0x23bdfffc,
	0x2001000f,
	0x20010011,
	0x0000000c,
	0x03e00008,
	0x23bd0004,


@@ 2656,8 2922,8 @@ ulong bootcode[]={
	0x03e00008,
	0x23bd0004,
	0x23bdfffc,
	0x8fc680c6,
	0x23c484b6,
	0x8fc6804e,
	0x23c48516,
	0x83a1000b,
	0x00000027,
	0x3021007f,


@@ 2680,13 2946,13 @@ ulong bootcode[]={
	0x00021603,
	0x00441021,
	0x24c10001,
	0xafc180c6,
	0xafc1804e,
	0xa0460000,
	0x00050e00,
	0x00010e03,
	0x00240821,
	0x80210000,
	0x23c2811e,
	0x23c28596,
	0x00010880,
	0x8fa3000c,
	0x00220821,


@@ 2705,7 2971,7 @@ ulong bootcode[]={
	0x00000027,
	0xafa2000c,
	0x8fa30020,
	0x0c000e98,
	0x0c000fa2,
	0xafa30010,
	0x8fa20000,
	0x00000027,


@@ 2720,7 2986,7 @@ ulong bootcode[]={
	0x8fc18112,
	0x00000027,
	0xafa10018,
	0x8fc28012,
	0x8fc2800e,
	0x00000027,
	0xafa20014,
	0x8faa0034,


@@ 2729,7 2995,7 @@ ulong bootcode[]={
	0x8fa20038,
	0x00000027,
	0x2442ffff,
	0xafc28012,
	0xafc2800e,
	0x00062025,
	0x80840000,
	0x20010025,


@@ 2743,12 3009,12 @@ ulong bootcode[]={
	0xafc18112,
	0x8fa20014,
	0x00000027,
	0xafc28012,
	0xafc2800e,
	0x8fa20000,
	0x23bd0030,
	0x00400008,
	0x000a0825,
	0x8fc18012,
	0x8fc1800e,
	0x00000027,
	0x0141182b,
	0x10600005,


@@ 2757,23 3023,23 @@ ulong bootcode[]={
	0x254a0001,
	0xafca8112,
	0xa0440000,
	0x8fc1800e,
	0x8fc1801a,
	0x00000027,
	0x24210001,
	0x148b0003,
	0xafc1800e,
	0x08000eab,
	0xafc7800e,
	0xafc1801a,
	0x08000fb5,
	0xafc7801a,
	0x20010009,
	0x1481ffdc,
	0x00000027,
	0x8fc2800e,
	0x8fc2801a,
	0x00000027,
	0x24420007,
	0x201cfff8,
	0x005c1024,
	0x08000eab,
	0xafc2800e,
	0x08000fb5,
	0xafc2801a,
	0x00075025,
	0x00062025,
	0x24c60001,


@@ 2805,11 3071,11 @@ ulong bootcode[]={
	0xafa8000c,
	0xafaa0024,
	0xafaa0010,
	0x23c184b6,
	0x23c18516,
	0x3082007f,
	0x00220821,
	0x80210000,
	0x23c2811e,
	0x23c28596,
	0x00010880,
	0x00220821,
	0x8c210000,


@@ 2831,9 3097,9 @@ ulong bootcode[]={
	0x24c60001,
	0xafa6003c,
	0x80840000,
	0x08000eea,
	0x08000ff4,
	0x00615025,
	0x08000eab,
	0x08000fb5,
	0x00a42821,
	0x00062025,
	0x24c60001,


@@ 2847,7 3113,7 @@ ulong bootcode[]={
	0x24c60001,
	0xafa6003c,
	0x80840000,
	0x08000eea,
	0x08000ff4,
	0x24a50004,
	0x28820030,
	0x1440ffc6,


@@ 2856,7 3122,7 @@ ulong bootcode[]={
	0x0024182a,
	0x10600003,
	0x00000027,
	0x08000eea,
	0x08000ff4,
	0x00000027,
	0x05010002,
	0x00000027,


@@ 2868,7 3134,7 @@ ulong bootcode[]={
	0x24c60001,
	0xafa6003c,
	0x80840000,
	0x08000f22,
	0x0800102c,
	0x2428ffd0,
	0x2001002d,
	0x14810006,


@@ 2887,7 3153,7 @@ ulong bootcode[]={
	0x00000027,
	0x1180ffa0,
	0x00000027,
	0x08000ee7,
	0x08000ff1,
	0x00e94823,
	0x012b0018,
	0x00000812,


@@ 2896,7 3162,7 @@ ulong bootcode[]={
	0x24c60001,
	0xafa6003c,
	0x80840000,
	0x08000f3f,
	0x08001049,
	0x2429ffd0,
	0x23bdffb4,
	0xafbf0000,


@@ 2957,7 3223,7 @@ ulong bootcode[]={
	0x8fa20054,
	0x2001ffff,
	0xafa20008,
	0x0c000fe8,
	0x0c0010f2,
	0xafa1000c,
	0x8fa1001c,
	0x8fa20000,


@@ 2973,15 3239,15 @@ ulong bootcode[]={
	0x00000027,
	0x1ca00003,
	0x00000027,
	0x08000f83,
	0x0800108d,
	0x00000027,
	0x08000f78,
	0x08001082,
	0x2484ffff,
	0x000d6025,
	0x08000f76,
	0x08001080,
	0x00c52823,
	0x8ca50000,
	0x08000f71,
	0x0800107b,
	0xafa4001c,
	0x8ca20000,
	0xafa4001c,


@@ 2989,13 3255,13 @@ ulong bootcode[]={
	0x00052c03,
	0x00050c00,
	0x00010c03,
	0x08000f71,
	0x0800107b,
	0x00012825,
	0x8ca50000,
	0x08000f71,
	0x0800107b,
	0xafa4001c,
	0x8ca50000,
	0x08000f71,
	0x0800107b,
	0xafa4001c,
	0x38410006,
	0x10200029,


@@ 3003,7 3269,7 @@ ulong bootcode[]={
	0x38410009,
	0x10200003,
	0x00000027,
	0x08000f6f,
	0x08001079,
	0x00000027,
	0x8ca50000,
	0x00000027,


@@ 3025,7 3291,7 @@ ulong bootcode[]={
	0x28820002,
	0x10400003,
	0x00000027,
	0x08000f83,
	0x0800108d,
	0x00000027,
	0x00a8001a,
	0x04e00005,


@@ 3036,25 3302,25 @@ ulong bootcode[]={
	0x00000027,
	0x1ca00003,
	0x00000027,
	0x08000f83,
	0x0800108d,
	0x00000027,
	0x08000fc6,
	0x080010d0,
	0x2484ffff,
	0x8ca10000,
	0xafa4001c,
	0x00012c00,
	0x00052c03,
	0x30a2ffff,
	0x08000f71,
	0x0800107b,
	0x00022825,
	0x23bdfff0,
	0x8faa0014,
	0x00006825,
	0x8fac0018,
	0x200b0020,
	0x8fc98012,
	0x8fc9800e,
	0x8fa8001c,
	0x8fc7800e,
	0x8fc7801a,
	0x8fc58112,
	0x00002025,
	0x000a3025,


@@ 3084,7 3350,7 @@ ulong bootcode[]={
	0x24840001,
	0x008c182a,
	0x1460fff5,
	0xafc7800e,
	0xafc7801a,
	0x000a3025,
	0x80c60000,
	0x00000027,


@@ 3101,9 3367,9 @@ ulong bootcode[]={
	0xa0460000,
	0x24e70001,
	0x14ce001c,
	0xafc7800e,
	0xafc7801a,
	0x000d3825,
	0xafcd800e,
	0xafcd801a,
	0x000a3025,
	0x80c60000,
	0x254a0001,


@@ 3126,7 3392,7 @@ ulong bootcode[]={
	0x24840001,
	0x0086182a,
	0x1460fff5,
	0xafc7800e,
	0xafc7801a,
	0x03e00008,
	0x23bd0010,
	0x20010009,


@@ 3135,15 3401,15 @@ ulong bootcode[]={
	0x24e20007,
	0x201cfff8,
	0x005c3824,
	0x08001021,
	0xafc7800e,
	0x0800112b,
	0xafc7801a,
	0x23bdfff0,
	0xafbf0000,
	0x23c18026,
	0x23c18006,
	0xafa10004,
	0xafa00008,
	0x2002ffff,
	0x0c000fe8,
	0x0c0010f2,
	0xafa2000c,
	0x8fa20000,
	0x23bd0010,


@@ 3161,7 3427,7 @@ ulong bootcode[]={
	0x8fa1001c,
	0x2002ffff,
	0xafa10008,
	0x0c000fe8,
	0x0c0010f2,
	0xafa2000c,
	0x8fa20000,
	0x23bd0014,


@@ 3181,7 3447,7 @@ ulong bootcode[]={
	0x8fa20028,
	0x2003000a,
	0xafa20010,
	0x0c000f53,
	0x0c00105d,
	0xafa30014,
	0x8fa20000,
	0x00000027,


@@ 3217,7 3483,7 @@ ulong bootcode[]={
	0x8fa30028,
	0x20020008,
	0xafa30010,
	0x0c000f53,
	0x0c00105d,
	0xafa20014,
	0x8fa20000,
	0x00000027,


@@ 3234,7 3500,7 @@ ulong bootcode[]={
	0x00000027,
	0xafa20008,
	0x8fa1001c,
	0x0c000fe8,
	0x0c0010f2,
	0xafa1000c,
	0x8fa20000,
	0x23bd0010,


@@ 3258,7 3524,7 @@ ulong bootcode[]={
	0x8fa30028,
	0x20020010,
	0xafa30010,
	0x0c000f53,
	0x0c00105d,
	0xafa20014,
	0x8fa20000,
	0x00000027,


@@ 3266,7 3532,7 @@ ulong bootcode[]={
	0x23bd0018,
	0x23bdfffc,
	0x8fc48112,
	0x8fc28012,
	0x8fc2800e,
	0x00000027,
	0x0082182b,
	0x10600005,


@@ 3314,10 3580,10 @@ ulong bootcode[]={
	0x23a1002c,
	0xe7a10004,
	0xe7a00008,
	0x0c0012d4,
	0x0c0013de,
	0xafa1000c,
	0xc7c18032,
	0xc7c08036,
	0xc7c18056,
	0xc7c0805a,
	0xc7a2002c,
	0x00000027,
	0x468010a1,


@@ 3329,7 3595,7 @@ ulong bootcode[]={
	0x00012843,
	0xafa50028,
	0x00050823,
	0x0c0012aa,
	0x0c0013b4,
	0xafa10004,
	0xc7a30094,
	0xc7a20098,


@@ 3341,7 3607,7 @@ ulong bootcode[]={
	0x8fa2002c,
	0x00000027,
	0x00220823,
	0x0c0012aa,
	0x0c0013b4,
	0xafa10004,
	0x8fad00a8,
	0x00007025,


@@ 3364,7 3630,7 @@ ulong bootcode[]={
	0x8fa2002c,
	0x00000027,
	0x00220823,
	0x0c0012aa,
	0x0c0013b4,
	0xafa10004,
	0x8fad00a8,
	0x8faa00a0,


@@ 3373,10 3639,10 @@ ulong bootcode[]={
	0xc7a20034,
	0x23a80040,
	0x46201102,
	0x08001119,
	0x08001223,
	0x00007025,
	0xc7c1801e,
	0xc7c08022,
	0xc7c18046,
	0xc7c0804a,
	0x00000027,
	0x4624003e,
	0x00000027,


@@ 3390,7 3656,7 @@ ulong bootcode[]={
	0x8fa2002c,
	0x00000027,
	0x00220823,
	0x0c0012aa,
	0x0c0013b4,
	0xafa10004,
	0x8fad00a8,
	0x8faa00a0,


@@ 3399,7 3665,7 @@ ulong bootcode[]={
	0xc7a20034,
	0x23a80040,
	0x46201102,
	0x08001130,
	0x0800123a,
	0x00007025,
	0x05410002,
	0x00000027,


@@ 3434,7 3700,7 @@ ulong bootcode[]={
	0x200affff,
	0xafaa00a0,
	0x200d0065,
	0x080010e6,
	0x080011f0,
	0xafad00a8,
	0x000e3825,
	0x00e5182a,


@@ 3457,8 3723,8 @@ ulong bootcode[]={
	0x46202101,
	0x24c30030,
	0xa0230001,
	0xc7c1801e,
	0xc7c08022,
	0xc7c18046,
	0xc7c0804a,
	0x24e70001,
	0x00e5182a,
	0x1460ffea,


@@ 3483,7 3749,7 @@ ulong bootcode[]={
	0x24c60001,
	0x2463fff6,
	0xa0230001,
	0x0800118a,
	0x08001294,
	0x24a5ffff,
	0x10c00007,
	0x200b0001,


@@ 3551,7 3817,7 @@ ulong bootcode[]={
	0x20020030,
	0xa0220000,
	0x24c6ffff,
	0x080011d1,
	0x080012db,
	0x24a50001,
	0x18e00013,
	0x00000027,


@@ 3571,7 3837,7 @@ ulong bootcode[]={
	0x256b0001,
	0xa0220000,
	0x24e7ffff,
	0x080011e2,
	0x080012ec,
	0x24a50001,
	0x20010067,
	0x11a10046,


@@ 3591,7 3857,7 @@ ulong bootcode[]={
	0x8fa1009c,
	0x2002ffff,
	0xafa10008,
	0x0c000fe8,
	0x0c0010f2,
	0xafa2000c,
	0x8fa20000,
	0x23bd0090,


@@ 3643,7 3909,7 @@ ulong bootcode[]={
	0x00000810,
	0x24210030,
	0xa0410000,
	0x08001202,
	0x0800130c,
	0x24a50001,
	0x24a6ffff,
	0x04c00006,


@@ 3663,11 3929,11 @@ ulong bootcode[]={
	0x00000027,
	0x10e6ffad,
	0x00062825,
	0x080011fc,
	0x08001306,
	0x24a50001,
	0x08001247,
	0x08001351,
	0x24e7ffff,
	0x0800123f,
	0x08001349,
	0x24c6ffff,
	0x8fa1002c,
	0x2002ffff,


@@ 3677,9 3943,9 @@ ulong bootcode[]={
	0x000e3025,
	0x8fa1002c,
	0x200d0068,
	0x080011be,
	0x080012c8,
	0x01416023,
	0x08001152,
	0x0800125c,
	0x254affff,
	0x23bdffe4,
	0xafbf0000,


@@ 3699,7 3965,7 @@ ulong bootcode[]={
	0x8fa2002c,
	0x20030065,
	0xafa20014,
	0x0c0010cf,
	0x0c0011d9,
	0xafa30018,
	0x8fa20000,
	0x00000027,


@@ 3723,7 3989,7 @@ ulong bootcode[]={
	0x8fa2002c,
	0x20030066,
	0xafa20014,
	0x0c0010cf,
	0x0c0011d9,
	0xafa30018,
	0x8fa20000,
	0x00000027,


@@ 3747,7 4013,7 @@ ulong bootcode[]={
	0x8fa2002c,
	0x20030067,
	0xafa20014,
	0x0c0010cf,
	0x0c0011d9,
	0xafa30018,
	0x8fa20000,
	0x00000027,


@@ 3760,7 4026,7 @@ ulong bootcode[]={
	0x04610008,
	0x00000027,
	0x00030823,
	0x0c0012aa,
	0x0c0013b4,
	0xafa10004,
	0x8fa20000,
	0x23bd0014,


@@ 3782,12 4048,12 @@ ulong bootcode[]={
	0x00032043,
	0xafa40010,
	0x00641023,
	0x0c0012aa,
	0x0c0013b4,
	0xafa20004,
	0xe7a10008,
	0xe7a0000c,
	0x8fa10010,
	0x0c0012aa,
	0x0c0013b4,
	0xafa10004,
	0xc7a30008,
	0xc7a2000c,


@@ 3865,14 4131,14 @@ ulong bootcode[]={
	0x45010008,
	0x00000027,
	0x2001ffff,
	0x0c001407,
	0x0c001511,
	0xafa10004,
	0x8fa20000,
	0x00000027,
	0x00400008,
	0x23bd0010,
	0x20020001,
	0x0c001407,
	0x0c001511,
	0xafa20004,
	0x8fa20000,
	0x00000027,


@@ 3919,7 4185,7 @@ ulong bootcode[]={
	0x0024182a,
	0x14600013,
	0x00000027,
	0x8fc28116,
	0x8fc2811a,
	0x8fa30008,
	0x00821007,
	0x201cffff,


@@ 3941,7 4207,7 @@ ulong bootcode[]={
	0x0044182a,
	0x1460fff3,
	0x00000027,
	0x8fc2811a,
	0x8fc2811e,
	0x2481ffea,
	0x00220807,
	0x201cffff,


@@ 3949,7 4215,7 @@ ulong bootcode[]={
	0x8fa3000c,
	0x00000027,
	0x00610824,
	0x08001358,
	0x08001462,
	0xafa1000c,
	0x23bdfffc,
	0x8fa30010,


@@ 4061,7 4327,7 @@ ulong bootcode[]={
	0x00000027,
	0xa0c8ffff,
	0x24c6ffff,
	0x080013d7,
	0x080014e1,
	0x24e7ffff,
	0x23bdfff4,
	0x3c017ff0,


@@ 4090,7 4356,7 @@ ulong bootcode[]={
	0x00000825,
	0xe7a50004,
	0xe7a40008,
	0x0c001418,
	0x0c001522,
	0xafa0000c,
	0x14200005,
	0x00000027,


@@ 4162,16 4428,25 @@ ulong bootcode[]={
	0x00000825,
	0x00000000,
	0x00000000,
	0x2a2a2a00,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x62616420,
	0x74797065,
	0x3a202564,
	0x0a006261,
	0x64207479,
	0x70653a20,
	0x25640a00,
	0x00000000,
	0x00000000,
	0x00000000,
	0x40240000,
	0x00000000,
	0x2a2a2a00,
	0x00000000,
	0x0000000d,
	0x00000000,
	0x3fd34413,
	0x55475a32,


@@ 4182,19 4457,18 @@ ulong bootcode[]={
	0x61747573,
	0x00000000,
	0x00000000,
	0x00006194,
	0x0000619e,
	0x000061a9,
	0x000061ae,
	0x000061c3,
	0x000061ca,
	0x000061df,
	0x000061e5,
	0x000061fa,
	0x00006202,
	0x00006217,
	0x0000621b,
	0x00000000,
	0x00006124,
	0x0000612e,
	0x00006139,
	0x0000613e,
	0x00006153,
	0x0000615a,
	0x0000616f,
	0x00006175,
	0x0000618a,
	0x00006192,
	0x000061a7,
	0x000061ab,
	0x00000000,
	0x00000000,
	0x00000000,


@@ 4210,14 4484,6 @@ ulong bootcode[]={
	0x00000000,
	0x00000000,
	0x00000000,
	0x0000000d,
	0x62616420,
	0x74797065,
	0x3a202564,
	0x0a006261,
	0x64207479,
	0x70653a20,
	0x25640a00,
	0x00000000,
	0x00000001,
	0x0000000a,


@@ 4230,37 4496,9 @@ ulong bootcode[]={
	0x05f5e100,
	0x3b9aca00,
	0x00000000,
	0x803ff000,
	0x001fffff,
	0x7fffffff,
	0x00004108,
	0x00004138,
	0x00004180,
	0x000041d0,
	0x000041e0,
	0x00004210,
	0x00004260,
	0x000042a4,
	0x000042b4,
	0x00004304,
	0x00004988,
	0x000049e8,
	0x00004a48,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x62697462,
	0x6f6f7465,


@@ 4311,19 4549,15 @@ ulong bootcode[]={
	0x6f6f7465,
	0x73002f6d,
	0x6970732f,
	0x39007365,
	0x72766572,
	0x00626f6f,
	0x743a2025,
	0x7320756e,
	0x6b6e6f77,
	0x6e0a0043,
	0x6f6e6e65,
	0x6374696e,
	0x6720746f,
	0x20736572,
	0x76657220,
	0x25730a00,
	0x3900626f,
	0x6f746669,
	0x6c650073,
	0x65727665,
	0x7200626f,
	0x6f743a20,
	0x25732075,
	0x6e6b6e6f,
	0x776e0a00,
	0x62697463,
	0x6f6e6e65,
	0x63740023,


@@ 4368,8 4602,6 @@ ulong bootcode[]={
	0x2f63746c,
	0x006e6f70,
	0x2e2e2e00,
	0x6e203d20,
	0x25640a00,
	0x77726974,
	0x65206e6f,
	0x70007265,


@@ 4410,36 4642,32 @@ ulong bootcode[]={
	0x3b007265,
	0x6d6f7465,
	0x20657272,
	0x6f720070,
	0x6f73742e,
	0x2e2e0023,
	0x732f2573,
	0x00637265,
	0x61746500,
	0x25640077,
	0x72697465,
	0x0023732f,
	0x626f6f74,
	0x00637265,
	0x61746500,
	0x25640077,
	0x72697465,
	0x006d6f75,
	0x6e742e2e,
	0x2e002f00,
	0x2f006269,
	0x6e64002f,
	0x00006d6f,
	0x756e7400,
	0x73756363,
	0x6573730a,
	0x002f6d69,
	0x70732f69,
	0x6e697400,
	0x696e6974,
	0x002f6d69,
	0x70732f69,
	0x6e697400,
	0x6f72006d,
	0x6f756e74,
	0x2e2e2e00,
	0x2f002f00,
	0x62696e64,
	0x002f0000,
	0x6d6f756e,
	0x74002f6d,
	0x6970732f,
	0x636f6e66,
	0x2f257300,
	0x25732e2e,
	0x2e00636f,
	0x6e666669,
	0x6c650072,
	0x65616463,
	0x6f6e6600,
	0x25732e2e,
	0x2e00626f,
	0x6f746669,
	0x6c650063,
	0x6f756c64,
	0x6e277420,
	0x72656164,
	0x206b6572,
	0x6e656c00,
	0x626f6f74,
	0x3a202573,
	0x3a202573,


@@ 4449,18 4677,80 @@ ulong bootcode[]={
	0x25730a00,
	0x3f006865,
	0x6c700025,
	0x730a0025,
	0x735b2573,
	0x5d3a2000,
	0x730a0073,
	0x65656b69,
	0x6e672062,
	0x6f6f7466,
	0x696c6500,
	0x7365656b,
	0x696e6720,
	0x23622f6d,
	0x656d0072,
	0x65616469,
	0x6e672062,
	0x6f6f7466,
	0x696c6500,
	0x77726974,
	0x696e6720,
	0x23622f6d,
	0x656d0023,
	0x622f6d65,
	0x6d006361,
	0x6e277420,
	0x6f70656e,
	0x2023622f,
	0x6d656d00,
	0x23622f6d,
	0x656d0063,
	0x616e2774,
	0x206f7065,
	0x6e202362,
	0x2f6d656d,
	0x0063616e,
	0x27742072,
	0x65616420,
	0x626f6f74,
	0x2066696c,
	0x65000a25,
	0x64006361,
	0x6e277420,
	0x72656164,
	0x20626f6f,
	0x74206669,
	0x6c65002b,
	0x25640063,
	0x616e2774,
	0x20726561,
	0x6420626f,
	0x6f742066,
	0x696c6500,
	0x2b256400,
	0x23622f62,
	0x6f6f7400,
	0x63616e27,
	0x74207265,
	0x61642023,
	0x632f636f,
	0x6e733b20,
	0x706c6561,
	0x73652072,
	0x65626f6f,
	0x74000000,
	0x74206f70,
	0x656e2023,
	0x622f626f,
	0x6f740020,
	0x656e7472,
	0x793a2030,
	0x78257578,
	0x0a006361,
	0x6e277420,
	0x73746172,
	0x74206b65,
	0x726e656c,
	0x0025735b,
	0x25735d3a,
	0x20006361,
	0x6e277420,
	0x72656164,
	0x2023632f,
	0x636f6e73,
	0x3b20706c,
	0x65617365,
	0x20726562,
	0x6f6f7400,
	0x00000000,
	0x00000000,
	0x00000000,


@@ 4494,9 4784,39 @@ ulong bootcode[]={
	0x00070000,
	0x08000000,
	0x00000000,
	0x00004530,
	0x00004560,
	0x000045a8,
	0x000045f8,
	0x00004608,
	0x00004638,
	0x00004688,
	0x000046cc,
	0x000046dc,
	0x0000472c,
	0x00004db0,
	0x00004e10,
	0x00004e70,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x00000000,
	0x0004640,
	0x0004b40,
	0x,
	0x0004640,
	0x0004b40,
	0x,
};

M power/conf.h => power/conf.h +24 -17
@@ 1,18 1,25 @@
	conf.nmach = 4 ;
	conf.nmod = 2000 ;
	conf.nalarm = 10000 ;
	conf.norig = 500 ;
	conf.nchan = 500 ;
	conf.nenv = 400 ;
	conf.nenvchar = 20000 ;
	conf.npgenv = 400 ;
	conf.nmtab = 100 ;
	conf.nmount = 500 ;
	conf.nmntdev = 30 ;
	conf.nmntbuf = 60 ;
	conf.nmnthdr = 60 ;
	conf.nstream = 512 ;
	conf.nsrv = 32 ;
	conf.nproc = 193 ;
	conf.npgrp = 100 ;
Conftab conftab[] = {
	{"nmach", &conf.nmach },
	{"nproc", &conf.nproc },
	{"npgrp", &conf.npgrp },
	{"npage", &conf.npage },
	{"norig", &conf.norig },
	{"npte", &conf.npte },
	{"nmod", &conf.nmod },
	{"nalarm", &conf.nalarm },
	{"nchan", &conf.nchan },
	{"nenv", &conf.nenv },
	{"nenvchar", &conf.nenvchar },
	{"npgenv", &conf.npgenv },
	{"nmtab", &conf.nmtab },
	{"nmount", &conf.nmount },
	{"nmntdev", &conf.nmntdev },
	{"nmntbuf", &conf.nmntbuf },
	{"nmnthdr", &conf.nmnthdr },
	{"nstream", &conf.nstream },
	{"nqueue", &conf.nqueue },
	{"nblock", &conf.nblock },
	{"nsrv", &conf.nsrv },
	{ 0, 0 },
};


M power/dat.h => power/dat.h +17 -17
@@ 115,27 115,27 @@ struct	FPsave

struct Conf
{
	int	nmach;		/* processors */
	int	nproc;		/* processes */
	int	npgrp;		/* process groups */
	ulong	nmach;		/* processors */
	ulong	nproc;		/* processes */
	ulong	npgrp;		/* process groups */
	ulong	npage;		/* total physical pages of memory */
	ulong	norig;		/* origins */
	ulong	npte;		/* contiguous page table entries */
	ulong	nmod;		/* single (modifying) page table entries */
	int	nalarm;		/* alarms */
	int	nchan;		/* channels */
	int	nenv;		/* distinct environment values */
	int	nenvchar;	/* environment text storage */
	int	npgenv;		/* environment files per process group */
	int	nmtab;		/* mounted-upon channels per process group */
	int	nmount;		/* mounts */
	int	nmntdev;	/* mounted devices (devmnt.c) */
	int	nmntbuf;	/* buffers for devmnt.c messages */
	int	nmnthdr;	/* headers for devmnt.c messages */
	int	nstream;	/* streams */
	int	nqueue;		/* stream queues */
	int	nblock;		/* stream blocks */
	int	nsrv;		/* public servers (devsrv.c) */
	ulong	nalarm;		/* alarms */
	ulong	nchan;		/* channels */
	ulong	nenv;		/* distinct environment values */
	ulong	nenvchar;	/* environment text storage */
	ulong	npgenv;		/* environment files per process group */
	ulong	nmtab;		/* mounted-upon channels per process group */
	ulong	nmount;		/* mounts */
	ulong	nmntdev;	/* mounted devices (devmnt.c) */
	ulong	nmntbuf;	/* buffers for devmnt.c messages */
	ulong	nmnthdr;	/* headers for devmnt.c messages */
	ulong	nstream;	/* streams */
	ulong	nqueue;		/* stream queues */
	ulong	nblock;		/* stream blocks */
	ulong	nsrv;		/* public servers (devsrv.c) */
};

struct Dev

M power/fns.h => power/fns.h +5 -0
@@ 17,7 17,11 @@ void	closemount(Mount*);
void	closepgrp(Pgrp*);
long	clrfpintr(void);
void	compactpte(Orig*, ulong);
ulong	confeval(char*);
void	confprint(void);
void	confinit(void);
void	confread(void);
void	confset(char*);
int	consactive(void);
int	conschar(void);
void	consoff(void);


@@ 68,6 72,7 @@ void	gotolabel(Label*);
void	gotopc(ulong);
void	growpte(Orig*, ulong);
void	*ialloc(ulong, int);
void	icflush(void *, int);
int	incref(Ref*);
void	insert(List**, List*, List*);
void	intr(ulong);

M power/l.s => power/l.s +33 -61
@@ 147,46 147,16 @@ TEXT	gotolabel(SB), $0
	MOVW	4(R2), R29
	RET

TEXT	gotopc(SB), $-4
TEXT	gotopc(SB), $8

	MOVW	0(FP), R7		/* save arguments for later */
	MOVW	_argc(SB), R4
	MOVW	_argv(SB), R5

	MOVW	$WBFLUSH, R1		/* flush write buffer */
	MOVW	0(R1), R1
	NOOP

	MOVW	$KSEG1, R3		/* change to uncached address space */
	MOVW	$gotopc0(SB), R2
	OR	R3, R2
	JMP	(R2)
TEXT gotopc0(SB), $-4

	MOVW	$(SWC|ISC), R1		/* swap and isolate cache, stay splhi */
	MOVW	R1, M(STATUS)
	NOOP

	MOVW	$gotopc1(SB), R2	/* change back to cached address space */
	JMP	(R2)
TEXT gotopc1(SB), $-4

	MOVW	$KSEG0, R6		/* init loop variables */
	MOVW	$(64*1024), R8
_gotopc1:
	MOVBU	R0, 0x00(R6)
	SUB	$0x4, R8
	ADD	$0x4, R6
	BGTZ	R8, _gotopc1

	MOVW	$gotopc2(SB), R2	/* change to uncached address space */
	OR	R3, R2
	JMP	(R2)
TEXT gotopc2(SB), $-4

	MOVW	R0, M(STATUS)		/* put caches back, still splhi */
	NOOP

	MOVW	_env(SB), R6
	MOVW	R0, 4(SP)
	MOVW	$(64*1024), R1
	MOVW	R1, 8(SP)
	JAL	icflush(SB)
	JMP	(R7)

TEXT	puttlb(SB), $4


@@ 502,14 472,16 @@ TEXT	restfpregs(SB), $0
	MOVW	R3, M(STATUS)
	RET


/*
 *  we avoid using R4, R5, R6, and R7 so gotopc can call us without saving them
 */
TEXT icflush(SB), $-4			/* icflush(physaddr, nbytes) */

	MOVW	M(STATUS), R6
	MOVW	0(FP), R4
	MOVW	4(FP), R5
	MOVW	M(STATUS), R10
	MOVW	0(FP), R8
	MOVW	4(FP), R9
	MOVW	$KSEG0, R3
	OR	R3, R4
	OR	R3, R8
	MOVW	$0, M(STATUS)
	MOVW	$WBFLUSH, R1		/* wbflush */
	MOVW	0(R1), R1


@@ 529,25 501,25 @@ TEXT icflush0(SB), $-4
TEXT icflush1(SB), $-4

_icflush1:
	MOVBU	R0, 0x00(R4)
	MOVBU	R0, 0x04(R4)
	MOVBU	R0, 0x08(R4)
	MOVBU	R0, 0x0C(R4)
	MOVBU	R0, 0x10(R4)
	MOVBU	R0, 0x14(R4)
	MOVBU	R0, 0x18(R4)
	MOVBU	R0, 0x1C(R4)
	MOVBU	R0, 0x20(R4)
	MOVBU	R0, 0x24(R4)
	MOVBU	R0, 0x28(R4)
	MOVBU	R0, 0x2C(R4)
	MOVBU	R0, 0x30(R4)
	MOVBU	R0, 0x34(R4)
	MOVBU	R0, 0x38(R4)
	MOVBU	R0, 0x3C(R4)
	SUB	$0x40, R5
	ADD	$0x40, R4
	BGTZ	R5, _icflush1
	MOVBU	R0, 0x00(R8)
	MOVBU	R0, 0x04(R8)
	MOVBU	R0, 0x08(R8)
	MOVBU	R0, 0x0C(R8)
	MOVBU	R0, 0x10(R8)
	MOVBU	R0, 0x14(R8)
	MOVBU	R0, 0x18(R8)
	MOVBU	R0, 0x1C(R8)
	MOVBU	R0, 0x20(R8)
	MOVBU	R0, 0x24(R8)
	MOVBU	R0, 0x28(R8)
	MOVBU	R0, 0x2C(R8)
	MOVBU	R0, 0x30(R8)
	MOVBU	R0, 0x34(R8)
	MOVBU	R0, 0x38(R8)
	MOVBU	R0, 0x3C(R8)
	SUB	$0x40, R9
	ADD	$0x40, R8
	BGTZ	R9, _icflush1
	MOVW	$icflush2(SB), R2	/* make sure PC is in uncached address space */
	OR	R3, R2
	JMP	(R2)


@@ 556,7 528,7 @@ TEXT icflush2(SB), $-4

	MOVW	$0, M(STATUS)		/* swap back caches, de-isolate them, and stay splhi */
	NOOP				/* +++ */
	MOVW	R6, M(STATUS)
	MOVW	R10, M(STATUS)
	RET

TEXT dcflush(SB), $-4			/* dcflush(physaddr, nbytes) */

M power/main.c => power/main.c +246 -53
@@ 12,19 12,39 @@
 */
int _argc; char **_argv; char **_env;

/*
 *  arguments passed to initcode
 */
char argbuf[512];
int argsize;

/*
 *  environment passed to any kernel started by this kernel
 */
char envbuf[64];
char *env[2];

/*
 *  configuration file read by boot program
 */
char confbuf[4*1024];

/*
 *  system name
 */
char sysname[64];

void
main(void)
{
	int i;

	icflush(0, 64*1024);
	active.exiting = 0;
	active.machs = 1;
	arginit();
	machinit();
	confinit();
	arginit();
	lockinit();
	printinit();
	tlbinit();


@@ 43,49 63,6 @@ main(void)
	schedinit();
}

/*
 *  copy arguments into a temporary buffer.  we do this because the arguments
 *  are in memory that may be allocated to processes or kernel buffers.
 */
void
arginit(void)
{
	int i, n;
	int nbytes;
	int ssize;
	char *p;
	char **argv;
	char *charp;

	/*
	 *  trim arguments to make them fit in the buffer
	 */
	for(nbytes = i = 0; i < _argc; i++){
		n = strlen(_argv[i]) + 1;
		ssize = BY2WD*(i+2) + ((nbytes+n+(BY2WD-1)) & ~(BY2WD-1));
		if(ssize > sizeof(argbuf))
			break;
		nbytes += n;
	}
	_argc = i;
	ssize = BY2WD*(i+1) + ((nbytes+(BY2WD-1)) & ~(BY2WD-1));

	/*
	 *  copy arguments into the buffer
	 */
	argv = (char**)(argbuf + sizeof(argbuf) - ssize);
	charp = (char*)(argbuf + sizeof(argbuf) - nbytes);
	for(i=0; i<_argc; i++){
		argv[i] = charp;
		n = strlen(_argv[i]) + 1;
		memcpy(charp, _argv[i], n);
		charp += n;
	}
	_argv = argv;

	argsize = ssize;
}

void
machinit(void)
{


@@ 413,18 390,152 @@ delete(List **head, List *where, List *old)
	where->next = old->next;
}

typedef struct Conftab {
	char *sym;
	ulong *x;
} Conftab;

#include "conf.h"

Conf	conf;

ulong
confeval(char *exp)
{
	char *op;
	Conftab *ct;

	/* crunch leading white */
	while(*exp==' ' || *exp=='\t')
		exp++;

	op = strchr(exp, '+');
	if(op != 0){
		*op++ = 0;
		return confeval(exp) + confeval(op);
	}

	op = strchr(exp, '*');
	if(op != 0){
		*op++ = 0;
		return confeval(exp) * confeval(op);
	}

	if(*exp >= '0' && *exp <= '9')
		return strtoul(exp, 0, 0);

	/* crunch trailing white */
	op = strchr(exp, ' ');
	if(op)
		*op = 0;
	op = strchr(exp, '\t');
	if(op)
		*op = 0;

	/* lookup in symbol table */
	for(ct = conftab; ct->sym; ct++)
		if(strcmp(exp, ct->sym) == 0)
			return *(ct->x);

	return 0;
}

/*
 *  each line of the configuration is of the form `param = expression'.
 */
void
confinit(void)
confset(char *sym)
{
	long x, i, j, *l, *e;
	char *val, *p;
	Conftab *ct;
	ulong x;

	/*
 	 *  parse line
	 */

#include  "conf.h"
	/* comment */
	if(p = strchr(sym, '#'))
		*p = 0;

	if(conf.nmach > MAXMACH)
		panic("confinit");
	/* skip white */
	for(p = sym; *p==' ' || *p=='\t'; p++)
		;
	sym = p;

	/* skip sym */
	for(; *p && *p!=' ' && *p!='\t' && *p!='='; p++)
		;
	if(*p)
		*p++ = 0;

	/* skip white */
	for(; *p==' ' || *p=='\t' || *p=='='; p++)
		;
	val = p;

	/*
	 *  lookup value
	 */
	for(ct = conftab; ct->sym; ct++)
		if(strcmp(sym, ct->sym) == 0){
			*(ct->x) = confeval(val);
			return;
		}

	if(strcmp(sym, "sysname")==0){
		p = strchr(val, ' ');
		if(p)
			*p = 0;
		strcpy(sysname, val);
	}
}

/*
 *  read the ascii configuration left by the boot kernel
 */
void
confread(void)
{
	char *line;
	char *end;

	/*
	 *  process configuration file
	 */
	line = confbuf;
	while(end = strchr(line, '\n')){
		*end = 0;
		confset(line);
		line = end+1;
	}
}

void
confprint(void)
{
	Conftab *ct;

	/*
	 *  lookup value
	 */
	for(ct = conftab; ct->sym; ct++)
		print("%s == %d\n", ct->sym, *ct->x);
}

void
confinit(void)
{
	long x, i, j, *l;

	/*
	 *  copy configuration down from high memory
	 */
	strcpy(confbuf, (char *)(0x80000000 + 4*1024*1024 - 4*1024));

	/*
	 *  size memory
	 */
	x = 0x12345678;
	for(i=4; i<128; i+=4){
		l = (long*)(KSEG1|(i*1024L*1024L));


@@ 436,14 547,96 @@ confinit(void)
		x += 0x3141526;
	}
	conf.npage = i*1024/4;

	/*
	 *  set minimal default values
	 */
	conf.nmach = 1;
	conf.nmod = 2000;
	conf.nalarm = 1000;
	conf.norig = 9;
	conf.nchan = 64;
	conf.nenv = 4;
	conf.nenvchar = 1000;
	conf.npgenv = 400;
	conf.nmtab = 4;
	conf.nmount = 4;
	conf.nmntdev = 4;
	conf.nmntbuf = 4;
	conf.nmnthdr = 4;
	conf.nstream = 4;
	conf.nsrv = 0;
	conf.nproc = 4;
	conf.npgrp = 4;
	conf.npte = 4 * conf.npage;
	conf.nqueue = 5 * conf.nstream;
	conf.nblock = 16 * conf.nstream;

	confread();

	if(conf.nmach > MAXMACH)
		panic("confinit");

}

/*
 *  copy arguments passed by the boot kernel (or ROM) into a temporary buffer.
 *  we do this because the arguments are in memory that may be allocated
 *  to processes or kernel buffers.
 */
#define SYSENV "netaddr="
void
arginit(void)
{
	int i, n;
	int nbytes;
	int ssize;
	char *p;
	char **argv;
	char *charp;

	/*
	 *  get the system name from the environment
	 */
	if(*sysname == 0){
		for(argv = _env; *argv; argv++){
			if(strncmp(*argv, SYSENV, sizeof(SYSENV)-1)==0){
				strcpy(sysname, (*argv) + sizeof(SYSENV)-1);
				break;
			}
		}
	}
	strcpy(envbuf, SYSENV);
	strcat(envbuf, sysname);
	env[0] = envbuf;
	env[1] = 0;

	/*
	 *  trim arguments to make them fit in the buffer (argv[0] is sysname)
	 */
	nbytes = 0;
	_argv[0] = sysname;
	for(i = 0; i < _argc; i++){
		n = strlen(_argv[i]) + 1;
		ssize = BY2WD*(i+2) + ((nbytes+n+(BY2WD-1)) & ~(BY2WD-1));
		if(ssize > sizeof(argbuf))
			break;
		nbytes += n;
	}
	_argc = i;
	ssize = BY2WD*(i+1) + ((nbytes+(BY2WD-1)) & ~(BY2WD-1));

	/*
	 *  zero memory from bss up
	 *  copy arguments into the buffer
	 */
	e = (long *)(i*1024*1024);
	for(l = &end; l < e; l++)
		*l = 0;
	argv = (char**)(argbuf + sizeof(argbuf) - ssize);
	charp = (char*)(argbuf + sizeof(argbuf) - nbytes);
	for(i=0; i<_argc; i++){
		argv[i] = charp;
		n = strlen(_argv[i]) + 1;
		memcpy(charp, _argv[i], n);
		charp += n;
	}
	_argv = argv;
	argsize = ssize;
}