{File name: Bank1Misc.mc Description: Miscellaneous Bank1 opcodes, Author: JPM, Created: July 16, 1986 Last Revised: JPM, 17-Dec-86 15:52:30 In commented codes, renamed @ROTATEGRAY (obsolete) to @LINEBREAK JPM, 16-Oct-86 17:00:55 Commented all image processing opcodes (phase 2) JPM, 9-Oct-86 12:39:49 Added @a250 as unimplemented opcode (formerly @BLTLINE) JPM, 29-Jul-86 14:25:06 Removed Reserve clause (now in Extensions.dfn) JPM, 18-Jul-86 9:17:04 Added STK ← TOS in Bank1Fault code JPM, 17-Jul-86 14:49:09 Reactivated image processing codes} { Copyright (C) 1986 by Xerox Corporation. All rights reserved.} {Macros for dispatching on ESC codes or causing an ESC code trap} MacroDef[ESCStd,(PC ← PC + 1, STK ← TOS, pop)]; MacroDef[ESCCancel,CANCELBR[Bank1EscOpcodeTrap,0F]]; MacroDef[Bank1ESCDisp,(ESCStd, DISP4[ESC#1n], c3, at[0#1,10,Bank1ESCHi])]; MacroDef[UnimplBank1ESCRange,(ESCStd, ESCCancel, c3, at[0#1,10,Bank1ESCHi])]; Bank1ESCx: Xbus ← TT LRot0, XDisp, push, DISP4[Bank1ESCHi], c2, at[addrBank1ESCx]; {floating point} IfEqual[ESC4nInBank1,1,Bank1ESCDisp[4]]; IfEqual[ESC5nInBank1,1,UnimplBank1ESCRange[5]]; IfEqual[ESCEnInBank1,1,Bank1ESCDisp[E]]; {Cedar} IfEqual[ESC6nInBank1,1,UnimplBank1ESCRange[6]]; {image processing} IfEqual[ESCAnInBank1,1,Bank1ESCDisp[A]]; {unassigned} IfEqual[ESCBnInBank1,1,UnimplBank1ESCRange[B]]; IfEqual[ESCCnInBank1,1,UnimplBank1ESCRange[C]]; IfEqual[ESCDnInBank1,1,UnimplBank1ESCRange[D]]; IfEqual[ESCFnInBank1,1,UnimplBank1ESCRange[F]]; Bank1EscOpcodeTrap: PC ← PC - 1, Bank ← r0100, {= bank0 in low 4 bits} c1; Bank1ESCb: T ← 0FF + TT + 1, GOTOBANK0[ESCc], c2; {-- Floating Point (40H - 5FH are reserved) } {@FADD: in VFpt c1, at[ 0,10,ESC4n];} {@FSUB: in VFpt c1, at[ 1,10,ESC4n];} {@FMUL: in VFpt c1, at[ 2,10,ESC4n];} {@FDIV: in VFpt c1, at[ 3,10,ESC4n];} {@FCOMP: in VFpt c1, at[ 4,10,ESC4n];} {@FIX: in VFpt c1, at[ 5,10,ESC4n];} {@FLOAT: in VFpt c1, at[ 6,10,ESC4n];} {@FIXI: in VFpt c1, at[ 7,10,ESC4n];} {@FIXC: in VFpt c1, at[ 8,10,ESC4n];} {@FSTICKY: in VFpt c1, at[ 9,10,ESC4n];} {@FREM: in VFpt c1, at[0A,10,ESC4n];} {@ROUND: in VFpt c1, at[0B,10,ESC4n];} {@ROUNDI: in VFpt c1, at[0C,10,ESC4n];} {@ROUNDC: in VFpt c1, at[0D,10,ESC4n];} {@FSQRT: in VFpt c1, at[0E,10,ESC4n];} {@FSC: in VFpt c1, at[0F,10,ESC4n];} {-- Cedar collector and allocator (60H - 6FH are reserved) } {@RECLAIMREF: written by Mesa c1, at[ 0,10,ESC6n];} {@ALTERCOUNT: written by Mesa c1, at[ 1,10,ESC6n];} {@RESETSTKBITS: written by Mesa c1, at[ 2,10,ESC6n];} {@GCSETUP: written by Mesa c1, at[ 3,10,ESC6n];} {@a144: written by Mesa c1, at[ 4,10,ESC6n];} {@ENUMERATERECLAIMABLE: written by Mesa c1, at[ 5,10,ESC6n];} {@a146: written by Mesa c1, at[ 6,10,ESC6n];} {@CREATEREF: written by Mesa c1, at[ 7,10,ESC6n];} {@a150: written by Mesa c1, at[ 8,10,ESC6n];} {@REFTYPE: written by Mesa c1, at[ 9,10,ESC6n];} {@CANONICALREFTYPE: written by Mesa c1, at[0A,10,ESC6n];} {@ALLOCQUANTIZED: written by Mesa c1, at[0B,10,ESC6n];} {@ALLOCHEAP: written by Mesa c1, at[0C,10,ESC6n];} {@FREEOBJECT: written by Mesa c1, at[0D,10,ESC6n];} {@FREEQUANTIZED: written by Mesa c1, at[0E,10,ESC6n];} {aFREEPREFIXED: written by Mesa c1, at[0F,10,ESC6n];} {-- Image Processing Instructions (A0H - AFH are reserved) } {@FLOYD: in Floyd c1, at[ 0,10,ESCAn];} {@GRAYBLT: in GrayBLTCtrl c1, at[ 1,10,ESCAn];} {@GRAYSUM: in GrayBLTCtrl c1, at[ 2,10,ESCAn];} {@GRAYTHRSHLD: in GrayBLTCtrl c1, at[ 3,10,ESCAn];} {@TRAPZBLT: in TrapzInit c1, at[ 4,10,ESCAn];} {@COUNTBITSON: in CountBits c1, at[ 5,10,ESCAn];} {@COUNTBITSOFF: in CountBits c1, at[ 6,10,ESCAn];} {@BLTLINEGRAY: in BLTLineGray c1, at[ 7,10,ESCAn];} {@HALFTONE: in Halftone c1, at[ 8,10,ESCAn];} {@CHAINBLT: in ChainBLT c1, at[ 9,10,ESCAn];} {@BUMPBITADDRESS: in BumpBitAddress c1, at[0A,10,ESCAn];} {@FLIPXBITS: in FlipX c1, at[0B,10,ESCAn];} {@FLIPXGRAY: in FlipX c1, at[0C,10,ESCAn];} {@ROTATEBITS: in Rotate c1, at[0D,10,ESCAn];} {@LINEBREAK: in LineBreak c1, at[0E,10,ESCAn];} {@SCALEBITSTOGRAY: in ScaleBits c1, at[0F,10,ESCAn];} {-- Floating Point additional} @a340: PC ← PC - 1, Bank ← r0100, GOTO[Bank1ESCb], {Unimplemented} c1, at[ 0,10,ESCEn]; {@Unpack1Op: in VFpt c1, at[ 1,10,ESCEn];} {@DeNorm: in VFpt c1, at[ 2,10,ESCEn];} {@UsualPack: in VFpt c1, at[ 3,10,ESCEn];} @a344: PC ← PC - 1, Bank ← r0100, GOTO[Bank1ESCb], {Unimplemented} c1, at[ 4,10,ESCEn]; @a345: PC ← PC - 1, Bank ← r0100, GOTO[Bank1ESCb], {Unimplemented} c1, at[ 5,10,ESCEn]; @a346: PC ← PC - 1, Bank ← r0100, GOTO[Bank1ESCb], {Unimplemented} c1, at[ 6,10,ESCEn]; @a347: PC ← PC - 1, Bank ← r0100, GOTO[Bank1ESCb], {Unimplemented} c1, at[ 7,10,ESCEn]; @a350: PC ← PC - 1, Bank ← r0100, GOTO[Bank1ESCb], {Unimplemented} c1, at[ 8,10,ESCEn]; @a351: PC ← PC - 1, Bank ← r0100, GOTO[Bank1ESCb], {Unimplemented} c1, at[ 9,10,ESCEn]; @a352: PC ← PC - 1, Bank ← r0100, GOTO[Bank1ESCb], {Unimplemented} c1, at[0A,10,ESCEn]; @a353: PC ← PC - 1, Bank ← r0100, GOTO[Bank1ESCb], {Unimplemented} c1, at[0B,10,ESCEn]; @a354: PC ← PC - 1, Bank ← r0100, GOTO[Bank1ESCb], {Unimplemented} c1, at[0C,10,ESCEn]; @a355: PC ← PC - 1, Bank ← r0100, GOTO[Bank1ESCb], {Unimplemented} c1, at[0D,10,ESCEn]; @a356: PC ← PC - 1, Bank ← r0100, GOTO[Bank1ESCb], {Unimplemented} c1, at[0E,10,ESCEn]; @a357: PC ← PC - 1, Bank ← r0100, GOTO[Bank1ESCb], {Unimplemented} c1, at[0F,10,ESCEn]; {paths back to bank 0} {Bank1Fault: go to fault handler} {Parameters: T contains fault type (qPageFault or qWriteProtect) faulted address already stored in [uFaultParm1, uFaultParm0]} Bank1Fault: PC ← PC - 1, Bank ← r0100 {= bank0 in low 4 bits}, push, c3; Rx ← pFault, STK ← TOS, pop, GOTOBANK0[SaveRegs], c1; {Bank1Interrupt: go to interrupt handler} Bank1Interrupt: Bank ← bank0, c1; Bank1Intc2: PC ← PC - 1, GOTOBANK0[RefillInt], c2; {Bank1NxtInstc1: dispatch on next opcode} Bank1NxtInstc1: Bank ← bank0, c1; IBDisp, GOTOBANK0[DISPNIonly], c2;