{ Misc.mc, HGM, 4-Nov-84 2:59:13
File name: <Workstation>mc>Misc.mc
Description: Miscellaneous Mesa opcodes,
Author: R. Garner,
Created: April 3, 1980,
Last Edited: Daniels, 15-Jun-83 19:01:49 new instruction set
Last Edited: Amy Fasnacht, 4-Jan-83 10:52:30 Fix typo in BLTLR comment
Last Edited: Amy Fasnacht, 22-Dec-82 10:49:15 Make BLTLR microcode implementation
Last Edited: Amy Fasnacht, September 2, 1982 12:19 PM Do STK←TOS at Unimplemented Opcodes
Last Edited: Amy Fasnacht, August 2, 1982 11:41 AM MaintenancePanelOffset
Last Edited: Amy Fasnacht, April 29, 1982 1:48 PM Add TStatus to @INPUT and TAddr to @OUTPUT
Last Edited: Amy Fasnacht, April 23, 1982 2:01 PM Add conditional assembly for MagTape
Edited: Sandman, February 24, 1982 2:18 PM Add SPP inst
Edited: Sandman, November 17, 1981 5:04 PM new instruction set
Edited: Sandman, April 23, 1981 8:46 AM: Fix Stack on Misc ~IN[0..15]
Last Edited: Jim Frandeen, March 16, 1981 11:51 AM: Allow Block to catch Checksum Misc
Last Edited: Johnsson, January 22, 1981 1:11 PM}
{*****************************************************************************
ESC(L) - Escape operations
*****************************************************************************}
@ESCL: Xbus ← ibHigh, XDisp, GOTO[ESCx], c1, opcode[371'b];
@ESC: Xbus ← ibHigh, XDisp, c1, opcode[370'b];
ESCx: TT ← ib, XDisp, push, DISP4[ESCHi], c2;
PC ← PC + 1, STK ← TOS, pop, DISP4[ESC0n], c3, at[0,10,ESCHi];
PC ← PC + 1, STK ← TOS, pop, DISP4[ESC1n], c3, at[1,10,ESCHi];
PC ← PC + 1, STK ← TOS, pop, DISP4[ESC2n], c3, at[2,10,ESCHi];
PC ← PC + 1, STK ← TOS, pop, CANCELBR[ESCa,0F], c3, at[3,10,ESCHi];
PC ← PC + 1, STK ← TOS, pop, CANCELBR[ESCa,0F], c3, at[4,10,ESCHi];
PC ← PC + 1, STK ← TOS, pop, CANCELBR[ESCa,0F], c3, at[5,10,ESCHi];
PC ← PC + 1, STK ← TOS, pop, CANCELBR[ESCa,0F], c3, at[6,10,ESCHi];
PC ← PC + 1, STK ← TOS, pop, DISP4[ESC7n], c3, at[7,10,ESCHi];
PC ← PC + 1, STK ← TOS, pop, L2 ← 0, DISP4[ESC8n], c3, at[8,10,ESCHi];
PC ← PC + 1, STK ← TOS, pop, L2 ← 0, DISP4[ESC9n], c3, at[9,10,ESCHi];
PC ← PC + 1, STK ← TOS, pop, CANCELBR[ESCa,0F], c3, at[0A,10,ESCHi];
PC ← PC + 1, STK ← TOS, pop, CANCELBR[ESCa,0F], c3, at[0B,10,ESCHi];
PC ← PC + 1, STK ← TOS, pop, CANCELBR[ESCa,0F], c3, at[0C,10,ESCHi];
PC ← PC + 1, STK ← TOS, pop, CANCELBR[ESCa,0F], c3, at[0D,10,ESCHi];
PC ← PC + 1, STK ← TOS, pop, CANCELBR[ESCa,0F], c3, at[0E,10,ESCHi];
PC ← PC + 1, STK ← TOS, pop, CANCELBR[ESCa,0F], c3, at[0F,10,ESCHi];
ESCa: PC ← PC - 1, c1;
ESCb: T ← 0FF + TT + 1, c2;
ESCc: G ← 1, GOTO[Trapc1], c3;
ESC0n: PC ← PC - 1, GOTO[ESCb], c1, at[0,10,ESC0n];
PC ← PC - 1, GOTO[ESCb], c1, at[1,10,ESC0n];
{@MW in Process c1, at[2,10,ESC0n];}
{@MR in Process c1, at[3,10,ESC0n];}
{@NC in Process c1, at[4,10,ESC0n];}
{@BC in Process c1, at[5,10,ESC0n];}
{@REQ in Process c1, at[6,10,ESC0n];}
{@SM in Misc c1, at[7,10,ESC0n];}
{@SMF in Misc c1, at[8,10,ESC0n];}
{@GMF in Misc c1, at[9,10,ESC0n];}
{@AF in Xfer c1, at[0A,10,ESC0n];}
{@FF in Xfer c1, at[0B,10,ESC0n];}
{@PI in Xfer c1, at[0C,10,ESC0n];}
{@PO in Xfer c1, at[0D,10,ESC0n];}
{@POR in Xfer c1, at[0E,10,ESC0n];}
{@SPP in Process c1, at[0F,10,ESC0n];}
{@DI in Xfer c1, at[0,10,ESC1n];}
{@EI in Xfer c1, at[1,10,ESC1n];}
{@XOR in Stack c1, at[2,10,ESC1n];}
{@DAND in Stack c1, at[3,10,ESC1n];}
{@DIOR in Stack c1, at[4,10,ESC1n];}
{@DXOR in Stack c1, at[5,10,ESC1n];}
{@ROTATE in Stack c1, at[6,10,ESC1n];}
{@DSHIFT in Stack c1, at[7,10,ESC1n];}
{@LINT in Stack c1, at[8,10,ESC1n];}
{@JS in Jump c1, at[9,10,ESC1n];}
{@RCFS in StringField c1, at[0A,10,ESC1n];}
{@RC in Read c1, at[0B,10,ESC1n];}
{@UDIV in Stack c1, at[0C,10,ESC1n];}
{@LUDIV in Stack c1, at[0D,10,ESC1n];}
{@ROB in Read c1, at[0E,10,ESC1n];}
{@WOB in Write c1, at[0F,10,ESC1n];}
{@DSK in Xfer c1, at[0,10,ESC2n];}
{@XE in Xfer c1, at[1,10,ESC2n];}
{@XF in Xfer c1, at[2,10,ESC2n];}
{@LSK in Xfer c1, at[3,10,ESC2n];}
{@BNDCKL in Stack c1, at[4,10,ESC2n];}
{@NILCK in Stack c1, at[5,10,ESC2n];}
{@NILCKL in Stack c1, at[6,10,ESC2n];}
{@BLTLR in Block c1, at[7,10,ESC2n];}
{@BLEL in Block c1, at[8,10,ESC2n];}
{@BLECL in Block c1, at[9,10,ESC2n];}
{@CKSUM in Block c1, at[0A,10,ESC2n];}
{@BITBLT in BBInit c1, at[0B,10,ESC2n];}
@TXTBLT:
PC ← PC - 1, GOTO[ESCb], c1, at[0C,10,ESC2n];
@BYTBLT:
PC ← PC - 1, GOTO[ESCb], c1, at[0D,10,ESC2n];
@BYTBLTR:
PC ← PC - 1, GOTO[ESCb], c1, at[0E,10,ESC2n];
{@VERSION in VersionDxx c1, at[0F,10,ESC2n];}
@a177: PC ← PC - 1, GOTO[ESCb], c1, at[0F,10,ESC7n];
{@INPUT in MiscDxx c1, at[0,10,ESC8n];}
{@OUTPUT in MiscDxx c1, at[1,10,ESC8n];}
{@LOADRAMJ in MiscDxx c1, at[2,10,ESC8n];}
@BANDBLT:
PC ← PC - 1, GOTO[ESCb], c1, at[3,10,ESC8n];
{*****************************************************************************
SM Set Map
*****************************************************************************}
@SM: TOS ← TOS and 7, pop, c1, at[7,10,ESC0n];
TT ← STK, pop, c2;
TT ← TT LRot8, c3;
Xbus ← STK, pop, c1;
T ← STK, pop, c2;
rhT ← T ← T LRot8, c3;
TOS ← TOS LRot4, fXpop, push, c1;
TT ← TT and ~0F0, c2;
TT ← TT or TOS, Xbus ← TOS LRot12, XDisp, c3;
SMd: Map ← [rhT,T], T ← 80, DISP4[SMc,8], c1;
SMc: MDR ← TT and ~T, IBDisp, GOTO[SLa], c2, at[08,10,SMc];
MDR ← TT and ~T, IBDisp, GOTO[SLa], c2, at[09,10,SMc];
MDR ← TT or T, IBDisp, GOTO[SLa], c2, at[0A,10,SMc];
MDR ← TT or T, IBDisp, GOTO[SLa], c2, at[0B,10,SMc];
MDR ← TT and ~T, IBDisp, GOTO[SLa], c2, at[0C,10,SMc];
MDR ← TT and ~T, IBDisp, GOTO[SLa], c2, at[0D,10,SMc];
MDR ← TT and ~T, IBDisp, GOTO[SLa], c2, at[0E,10,SMc];
MDR ← TT or T, IBDisp, GOTO[SLa], c2, at[0F,10,SMc];
{*****************************************************************************
SMF Set Map Flags
*****************************************************************************}
@SMF: pop, L0←0, c1, at[8,10,ESC0n];
T ← STK, pop, c2;
SMFa: TOS ← TOS and 7, fXpop, push, c3;
rhT ← T ← T LRot8, c1;
Rx ← ~80, c2;
TT ← TOS{map flags} LRot4, c3;
Map ← [rhT,T], c1;
Q ← ~0F0, c2;
TOS ← Rx and MD, c3;
Rx ← TOS LRot12, XDisp{disp old flags}, c1;
TOS ← TOS and Q, DISP4[SMFb,8], c2;
SMFb: TT ← TOS or TT, GOTO[SMFc], c3, at[08,10,SMFb];
TT ← TOS or TT, GOTO[SMFc], c3, at[09,10,SMFb];
TT ← TOS or TT, GOTO[SMFc], c3, at[0A,10,SMFb];
TT ← TOS or TT, GOTO[SMFc], c3, at[0B,10,SMFb];
TT ← TOS or TT, GOTO[SMFc], c3, at[0C,10,SMFb];
TT ← TOS or TT, GOTO[SMFc], c3, at[0D,10,SMFb];
TT ← TOS or 60, GOTO[SMFc], c3, at[0E,10,SMFb];
TT ← TOS or TT, GOTO[SMFc], c3, at[0F,10,SMFb];
SMFc: Rx ← Rx and 7, c1;
TOS ← TOS LRot8, push, c2;
STK ← Rx, push, L0Disp, c3;
STK ← TOS, push,BRANCH[SMFd, GMFa], c1;
SMFd: STK ← 0, c2;
Xbus ← TT LRot12, XDisp, GOTO[SMd], c3;
{*****************************************************************************
GMF Get Map Flags
*****************************************************************************}
@GMF: T ← STK, pop, L0←1, c1, at[9,10,ESC0n];
GOTO[SMFa], c2;
GMFa: STK ← 0, IBDisp, GOTO[SLa], c2;
{*****************************************************************************
WR - Write Registers
*****************************************************************************}
@WRPSB: uPSB ← TOS, c1, at[0,10,ESC7n];
WRx: TOS ← STK, pop, IBDisp, GOTO[DISPNIonly], c2;
@WRMDS: UvMDS ← TOS, L0 ← 0, c1, at[1,10,ESC7n];
Q ← UvL, c2;
WRMDSc: rhMDS ← UvMDS, c3;
Map ← Q ← [rhMDS, Q], L0Disp, c1;
BRANCH[WRMDSa, WRMDSb], c2;
WRMDSa: L ← rhL ← MD, c3;
MAR ← L ← [rhL, Q+0], c1;
Q ← UvG, L0 ← 1, GOTO[WRMDSc], c2;
WRMDSb: G ← rhG ← MD, c3;
MAR ← G ← [rhG, Q+0], GOTO[WRx], c1;
@WRWP: uWP ← TOS, GOTO[WRx], c1, at[2,10,ESC7n];
@WRWDC: uWDC ← TOS, GOTO[WRx], c1, at[3,10,ESC7n];
@WRPTC: uPTC ← TOS, GOTO[WRx], c1, at[4,10,ESC7n];
{@WRIT in MiscDxx c1, at[5,10,ESC7n];}
@WRXTS: uXTS ← TOS, GOTO[WRx], c1, at[6,10,ESC7n];
{@WRMP in MiscDxx c1, at[7,10,ESC7n];}
{*****************************************************************************
RR - Read Registers
*****************************************************************************}
@RRPSB: TOS ← uPSB, push, GOTO[RRx], c1, at[8,10,ESC7n];
RRx: push, fZpop, IBDisp, GOTO[DISPNIonly], c2;
@RRMDS: TOS ← UvMDS, push, GOTO[RRx], c1, at[9,10,ESC7n];
@RRWP: TOS ← uWP, push, GOTO[RRx], c1, at[0A,10,ESC7n];
@RRWDC: TOS ← uWDC, push, GOTO[RRx], c1, at[0B,10,ESC7n];
@RRPTC: TOS ← uPTC, push, GOTO[RRx], c1, at[0C,10,ESC7n];
@RRXTS: TOS ← uXTS, push, GOTO[RRx], c1, at[0E,10,ESC7n];
{*****************************************************************************
Unimplemented Opcodes
*****************************************************************************}
Unimp: TT ← 76'b, push, GOTO[OpcodeTrap], c1, opcode[76'b];
TT ← 77'b, push, GOTO[OpcodeTrap], c1, opcode[77'b];
TT ← 175'b, push, GOTO[OpcodeTrap], c1, opcode[175'b];
TT ← 176'b, push, GOTO[OpcodeTrap], c1, opcode[176'b];
TT ← 177'b, push, GOTO[OpcodeTrap], c1, opcode[177'b];
TT ← 277'b, push, GOTO[OpcodeTrap], c1, opcode[277'b];
TT ← 372'b, push, GOTO[OpcodeTrap], c1, opcode[372'b];
TT ← 373'b, push, GOTO[OpcodeTrap], c1, opcode[373'b];
TT ← 374'b, push, GOTO[OpcodeTrap], c1, opcode[374'b];
TT ← 375'b, push, GOTO[OpcodeTrap], c1, opcode[375'b];
TT ← 376'b, push, GOTO[OpcodeTrap], c1, opcode[376'b];
OpcodeTrap:
T ← sOpcodeTrap, STK ← TOS, pop, GOTO[ESCc], c2;
{ E N D }