{mlisp4k.mc
created by cal:   5-Nov-84 15:59:05
 }

{*****************************************************************************
	BITBLT
*****************************************************************************}
{@BBLT:	opcode[166'b],
	Bank ← 0,	c1;
	,	c2;
	CROSS[BBEntry],	c3;
}

BBThru:
	TOSH ← smallpl, GOTO[IB.pc1]	,c1;

{*****************************************************************************
	MISC	Input
*****************************************************************************}

@MISC1:	opcode[170'b],
	L2 ← L2.0, GOTO[Misc],	c1;
@MISC2:	opcode[171'b],
	L2 ← L2.0,	c1;
Misc:	PC ← PC + 1, Xbus ← ib, XDisp,	c2;
	uTOS ← TOS, YDisp, DISP4[MiscDisp, 0C],	c3;

Misc0:	Q ← 121'd, CANCELBR[sink2, 0F],	c1, at[0C,10, MiscDisp];{MP9121}
Misc3:	Q ← 121'd, CANCELBR[sink2, 0F],	c1, at[0F,10, MiscDisp];{MP9121}

{*****************************************************************************
	INPUT	Input
*****************************************************************************}

INPUT:	DISP4[MiscIn],	c1, at[0D,10, MiscDisp];
	TOS ← EIData, IBDisp, L2 ← L2.0, GOTO[MiscInEnd],	c2, at[0,10,MiscIn];
	TOS ← EStatus, IBDisp, L2 ← L2.0, GOTO[MiscInEnd],	c2, at[1,10,MiscIn];
	TOS ← KIData, IBDisp, L2 ← L2.0, GOTO[MiscInEnd],	c2, at[2,10,MiscIn];
	TOS ← KStatus, IBDisp, L2 ← L2.0, GOTO[MiscInEnd],	c2, at[3,10,MiscIn];
	TOS ← uSTATE, IBDisp, L2 ← L2.0, GOTO[MiscInEnd],	c2, at[4,10,MiscIn];
	TOS ← MStatus, IBDisp, L2 ← L2.0, GOTO[MiscInEnd],	c2, at[5,10,MiscIn];
	TOS ← KTest, IBDisp, L2 ← L2.0, GOTO[MiscInEnd],	c2, at[6,10,MiscIn];
	Q ← 122'd, GOTO[sink3],	c2, at[7,10,MiscIn];
	TOS ← VersionHi, GOTO[MiscVers],	c2, at[8,10,MiscIn];
	Q ← 122'd, GOTO[sink3],	c2, at[09,10,MiscIn];{MP9122}
	Q ← 122'd, GOTO[sink3],	c2, at[0A,10,MiscIn];{MP9122}
	Q ← 122'd, GOTO[sink3],	c2, at[0B,10,MiscIn];{MP9122}
	Q ← 122'd, GOTO[sink3],	c2, at[0C,10,MiscIn];{MP9122}
	Q ← 122'd, GOTO[sink3],	c2, at[0D,10,MiscIn];{MP9122}
	Q ← 122'd, GOTO[sink3],	c2, at[0E,10,MiscIn];{MP9122}
	Q ← 122'd, GOTO[sink3],	c2, at[0F,10,MiscIn];{MP9122}
MiscInEnd:
	TOSH ← smallpl, L2 ← L2.0, DISPNI[OpTable],	c3;

MiscVers:
	TOS ← TOS LRot8,	c3;
	TOS ← TOS or VersionLo,	c1;
	IBDisp, L2 ← L2.0, GOTO[MiscInEnd],	c2;


{*****************************************************************************
	OUTPUT	Output
*****************************************************************************}

OUTPUT:
	MAR ← S ← [rhS, S + 0], Xbus ← uTOS, XDisp, CANCELBR[$, 0F],	c1, at[0E,10, MiscDisp];
	S ← S - 2, DISP4[MiscOut],	c2;

	IOPOData ← MD, GOTO[OutEnd],	c3, at[0,10,MiscOut];
	IOPCtl ← MD, GOTO[OutEnd],	c3, at[1,10,MiscOut];
	KOData ← MD, GOTO[OutEnd],	c3, at[2,10,MiscOut];
	KCtl ← MD, GOTO[OutEnd],	c3, at[3,10,MiscOut];
	EOData ← MD, GOTO[OutEnd],	c3, at[4,10,MiscOut];
	EICtl ← MD, GOTO[OutEnd],	c3, at[5,10,MiscOut];
	DCtl ← MD, GOTO[OutEnd],	c3, at[6,10,MiscOut];
	TT ← MD, GOTO[OutSetBBTime],	c3, at[7,10,MiscOut];
	TT ← MD, GOTO[OutSetOpt],	c3, at[8,10,MiscOut];
	PCtl ← MD, GOTO[OutEnd],	c3, at[9,10,MiscOut];
	TT ← MD, GOTO[OutMCtl],	c3, at[0A,10,MiscOut];
	   Q ← 120'd, GOTO[sink1],		c3, at[0B,10,MiscOut];{MP9120}
	EOCtl ← MD, GOTO[OutEnd],	c3, at[0C,10,MiscOut];
	KCmd ← MD, GOTO[OutEnd],	c3, at[0D,10,MiscOut];
	   Q ← 120'd, GOTO[sink1],	c3, at[0E,10,MiscOut];
	POData ← MD, GOTO[OutEnd],	c3, at[0F,10,MiscOut];

OutSetBBTime:
	uBBTime ← TT, GOTO[IB.nop],	c1;
OutEnd:
	Noop, GOTO[IB.nop],	c1;
OutSetOpt:
	uLispOptions ← TT, GOTO[IB.nop],	c1;
OutMCtl:
	MCtl ← TT, GOTO[IB.nop],	c1;

{*******************************************************************}
logout:	TT ← 55{password to mesa}, CANCELBR[$]	c2;
	rhRx ← Rx ← uIOPage,	c3;

Off:	MAR ← [rhRx, IOPage.ProcessorCommand+0],	c1, at[LOGOUT];
	MDR ←  4,	c2;
	uLispBootMsg ← TT,  GOTO[Off],	c3;

Burdx:
	Rx ← 41, CANCELBR[$, 0F],	c1;
	DCtl ← Rx LRot0,	c2;
	IOPCtl ← 1, GOTO[Reset],	c3;

	{ E N D }