{NewInit.mc
Lichtenberg 13-Jul-84 18:42:06 changed to initialize both versions of u1FFF
Last modifiedby don:       9-Sep-83  9:51:57
Created by don:   2-Sep-83 13:38:39
Purcell  1-Jul-84 23:23:09 disabled writes to IOPage which moves from init{2000} to lisp{14000}
}

{SetTask[0];}

RegDef[uLisp1FFF,U,2E];   {Lisp's u1FFF}

StartNewInit:

	uRx ← Rx,	c1;
	UQSave ← Q,	c2;
	Q ← rhRx,	c3;

	UGsave ← Q,	c1;
	,	c2;
	,	c3;

	Rx{182} ← 0C1 LRot1,	c1;
	Rx ← Rx LRot1,	c2;
	uPcBreak ← Rx{304},	c3;

	Rx ← VALspace,	c1;
	uValHigh ← Rx,	c2;
	{stackP ← 0,}	c3;

	Rx ← Rx xor ~Rx,	c1;
	unboundPvar ← Rx,	c2;
	unboundFvar ← Rx,	c3;

	uStkLimO ← Rx,	c1;
	uWP ← 0,	c2;
	uWDC ← 0{uWDC inited by mesaInit},	c3;

	Rx ←  ~0FD,	c1;
	Rx ← Rx LRot8,	c2;
	uBfResidualRhmask ← Rx{2FF},	c3;

	Rx ←  0A0,	c1;
	Rx ← Rx LRot8,	c2;
	uFreeStackBlock ← Rx{0A000},	c3;

	Rx ←  0FF + 1,	c1;
	uFxNoPushReturn ← Rx{100h},	c2;
	Rx ←  LShift1(Rx + Rx), SE←0,	c3;

	uFxInCall ← Rx{400h},	c1;
	Rx ←  7F,	c2;
	u7F ← Rx{7F},	c3;

	Rx ←  ~0FF,	c1;{OK}
	u0FF ← ~Rx{~0FF},	c2;
	uFF00 ←  Q ← Rx{~0FF},	c3;

	Rx ← Q{0FF00} or 1,	c1;
	Rx ← Rx LRot8,	c2;
	u1FF ← Rx{1FF},	c3;

	Rx ← Q{0FF00} or 3,	c1;
	Rx ← Rx LRot8,	c2;
	uTT3FF ← Rx{3FF},	c3;

	Rx ← Q{0FF00} or 3,	c1;
	Rx ← Rx LRot8,	c2;
	u3FF ← Rx{3FF},	c3;

	Rx ← Q{0FF00} or 0F,	c1;
	Rx ← Rx LRot8,	c2;
	u0FFF ← Rx{0FFF},	c3;

	Rx ← Q{0FF00} or 1F,	c1;
	Rx ← Rx LRot8,	c2;
	u1FFF ← Rx{1FFF},	c3;
        uLisp1FFF {called u1FFF in lisp code} ← Rx, c1;
	, c2;
	, c3;

	Rx ← Q{0FF00} or 3F,	c1;
	Rx ← Rx LRot8,	c2;
	uTT3FFF ← Rx{3FFF},	c3;

	Rx ← Q{0FF00} or 3F,	c1;
	Rx ← Rx LRot8,	c2;
	u3FFF ← Rx{3FFF},	c3;

	Rx ← Q{0FF00} or 7F,	c1;
	Rx ← Rx LRot8,	c2;
	u7FFF ← Rx{7FFF},	c3;

	Rx ← Q{0FF00} or 7,	c1;
	Rx ← Rx LRot8,	c2;
	u7FF ← Rx{7FF},	c3;

	,	c1;
	Rx ← Rx xor 1,	c2;
	u7FE ← Rx{7FF},	c3;

	Rx ← 0,	c1;
	uLispOptions ← Rx,	c2;
	c3;

	{	{rCount}RCnt ← 0,	}	c1;
	{	{rY}RAdr ← 0,	}	c2;
	Rx ← 80,	c3;

	Rx ←  Rx LRot8,	c1;
	Noop,	c2;
	uBFmark ← Rx{8000},	c3;

{compliance: using uSTACKspace with duplicated high byte for bind ptr}

	Rx ← STACKspace,	c1;
	Rx ← Rx LRot8,	c2;
	Rx ← Rx or STACKspace,	c3;

	Noop,	c1;
	uSTACKspace ← Rx,	c2;
	Rx ← 0C0,	c3;

	Rx ←  Rx LRot8,	c1;
	Noop,	c2;
	uFXmark ← Rx{C000},	c3;

	Set[UFNTablePageHalf, Rshift[UFNTablebase, 9]];
	Rx ←  UFNTablePageHalf,	c1;
	Rx ←  Rx LRot8,	c2;
	uUFNTableBaseHalf ← Rx,	c3;

	Rx ← 88,	c1;
	Rx ← Rx LRot8,	c2;
	Q ← Rx,	c3;

	,	c1;
	Rx ← 1 RRot1, rhRx ← 1,	c2;
	Rx{4000} ← Rx RShift1,	c3;

	{MAR ← [rhRx, 0EC+0],	c1;
	MDR ← 0,	c2;
	,	c3;

	MAR ← [rhRx, 0ED+0],	c1;
	MDR ← Q{88} or 22,	c2;
	,	c3;}


	Rx ← uRx,	c1;
	Q ← UQSave,	c2;
	rhRx ← UGsave, GOTO[BackFromNewInit],	c3;

		{ E N D }