{mlisp12k.mc
created by cal:   5-Nov-84 15:59:32
}

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

	PC ← PC + PC16{***1}, GOTO[IBDispOnly]	,c1, at[BBExit];
IBDispOnly:
	IBDisp, L2 ← L2.0,	c2;
	TOSH ← smallpl, L2 ← L2.0, DISPNI[OpTable],	c3;

{*****************************************************************************
	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:	TOSH ← smallpl, 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];
	{TOS ← PPort}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}
	TOS ← uFLmode, IBDisp, L2 ← L2.0, GOTO[MiscInEnd],	c2, at[0B,10,MiscIn];
	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, TOS ← TOS or 1, 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];}
	TT ← MD, GOTO[OutSetFPmode],	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];
	TT ← MD, GOTO[OutPPort],	c3, at[0E,10,MiscOut];
	POData ← MD, GOTO[OutEnd],	c3, at[0F,10,MiscOut];

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

{*******************************************************************
	READPRINTERPORT		3 clicks
*******************************************************************}
@READPRINTERPORT:	opcode[164'b],
	MAR ← S ← [rhS, S + 1],	c1;
ReadRet:
	MDR ← TOSH, S ← S + 1, BRANCH[$, ReadCarry, 1],	c2;
	Ybus ← S xor uStkLimO, ZeroBranch,	c3;

	MAR ← [rhS, S + 0], BRANCH[$, ReadStkLim],	c1;
	MDR ← TOS,	c2;
	TOSH ← smallpl,	c3;

	TOS ← PPort, GOTO[IB.pc1],	c1;

{page cross:}
ReadCarry:	S ← S + 0FF,	c3;
	MAR ← [rhS, S + 0], GOTO[ReadRet],	c1;

{Stack Limit:}
ReadStkLim:	MDR ← TOS, 	c2;
	TOSH ← smallpl,	c3;

	TOS ← PPort,	c1;
	,	c2;
	PC ← PC + PC16, GOTO[StackOverflow],	c3;

{*******************************************************************
	WRITEPRINTERPORT		1 click
*******************************************************************}
@WRITEPRINTERPORT:	opcode[165'b],
	PPort ← TOS, L2 ← L2.0,	c1;
	PC ← PC + PC16, IBDisp,	c2;
	uPPsave ← TOS, L2 ← L2.0, DISPNI[OpTable],	c3;


{*******************************************************************}
logout:	TT ← 55{password to mesa},	c2;
	uLispBootMsg ← TT,	c3;

	Bank ← LOGOBank ,	c1;		{MPL  1-Jan-84 13:20:12 Changed for Domino 10}
	TT ← 0,	c2;
	rhRx ← Rx ← uIOPage, CROSS[LOGOUT]	c3;

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

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

	{ E N D }