{File name <tajo>dbBusExt.mc	BX clauses removed
Description: Daybreak Interlisp Emulator Bus Extension

use daybreak assembler on dbBusExt.mc to make dbBusExt.si and dbBusExt.ml
use dlion assembler on dlBusExt.mc to make dlBusExt.eb and rename to dbBusExt

Assumes only reg mBusStat and mBusIData will be read, to avoid tight memory timing

Purcell  27-Jul-85 13:17:53 edited
Purcell  22-Jul-85 22:50:49 created from BusExt.mc of 17-Apr-85  1:34:04 PST
}

{INPUT:	TOSH ← smallpl, DISP4[MiscIn],	c1, at[0D,10, MiscDisp];}

{
(SETQ MBUS.OUTL (PLUS 0 (LLSH REG 4)))
(SETQ MBUS.OUTM (PLUS 11 (LLSH REG 4)))
(SETQ MBUS.INL (PLUS 9 (LLSH REG 4)))
(SETQ MBUS.INM (PLUS 10 (LLSH REG 4)))

(\DEVICE.OUTPUT DATA MBUS.OUTL)
(\DEVICE.OUTPUT DATA MBUS.OUTM)
(SETQ DATA (\DEVICE.INPUT MBUS.INL))
(SETQ DATA (\DEVICE.INPUT MBUS.INM))
}
RegDef[uDummy,	UY,	0];	
RegDef[uDat,	U,	0D];{uTOS}{~0D = mBusStat or mBusIData}

{OpTable: , c1, at[500];}
		
BusX:	Noop,						c2, at[09,10,MiscIn];{read L}
	TOS ← TOS LRot12, 				c3;
	Ybus ← TOS, AltUaddr,				c1;
	{Float.L, {TOS ← FloatResult}FloatA← uDummy,}	c2;
pcInDn:	{TOS ← FloatA← FloatResult,}			c3;

	GOTO[IB.nop],					c1;

	Noop,						c2, at[0A,10,MiscIn];{read M}
	TOS ← TOS LRot12, 				c3;
	Ybus ← TOS, AltUaddr,				c1;
	{Float.M, {FloatResult}FloatA← uDummy,}GOTO[pcInDn], c2;


	Noop,						c3, at[0,10,MiscOut];{Write L}	
	Rx ← S + 2,					c1;
	Q ← rhS, 					c2;
	rhRx ← Q LRot0, 				c3;
			
	MAR ← Rx ← [rhRx, Rx + 0],			c1;
	TOS ← TOS LRot12,				c2;
	TT ← MD,					c3;
	
	uDat ← TT,					c1;
	Ybus ← TOS, {AltUaddr,} L2 ← L2.0, IBDisp,	c2;
	{Float.L,} Xbus ← uDat, L2 ← L2.0, DISPNI[OpTable], c3;


label:	Noop,						c3, at[0B,10,MiscOut];{Write M}	
	Rx ← S + 2,					c1;
	Q ← rhS,					c2;
	rhRx ← Q LRot0,					c3;
	
	MAR ← Rx ← [rhRx, Rx + 0],			c1;
	TOS ← TOS LRot12,				c2;
	TT ← MD,					c3;
	
	uDat ← TT,					c1;
	Ybus ← TOS, {AltUaddr,} L2 ← L2.0, IBDisp,	c2;
	{Float.M,} Xbus ← uDat, L2 ← L2.0, DISPNI[OpTable], c3;

	{ E N D }