Trailing-Edge
-
PDP-10 Archives
-
decuslib20-04
-
decus/20-0134/simfcl.mac
There is 1 other file named simfcl.mac in the archive. Click here to see a list.
TITLE SIMFCL PROGRAM TO MEASURE THE EXCERCISE OF LOCATIONS OF FCL331.MAC
SUBTTL PARAMETERS, DEFINITIONS AND INITIALIZATION.
;A CODE TABLE IS FILLED WITH JSR INSTRUCTIONS.
;THAT TABLE IS THEN USED FOR THE SIMULATION, BY EXECUTING EACH JSR
;IN TURN.
;THE JSR IS REPLACED BY REAL CODE IF:
; 1. THE CODE IS FETCHED, AND
; 2. THE INSTRUCTION IS NOT A PC-SENSITIVE ONE, AND
; 3. IT DOES NOT REFERENCE A VARIABLE HIGH SEGMENT LOCATION.
;THE JSR IS REPLACED BY A SIMULATION INSTRUCTION IF:
; 1. THE ABOVE CONDITIONS HOLD, AND
; 2. IT IS A LUUO OR A JUMP INSTRUCTION.
CA==13 ;CUSTOMER ACCUMULATOR.
DEFINE HALT (A) <
JRST [
OUTSTR [ASCIZ "
?A
"]
JRST 4,.
]
>;END DEFINE HALT (A)
BTYPE==1B1 ;THIS IS A BYTE INSTRUCTION OR XCT.
STYPE==1B2 ;TTCALL ONLY.
MTYPE==1B3 ;THIS INSTRUCTION WILL REFERENCE MEMORY.
DTYPE==1B4 ;THIS INSTRUCTION WILL REFERENCE MEM+1
LTYPE==1B5 ;THIS INSTRUCTION HAS A 4-WORD ARGUMENT BLOCK.
JTYPE==1B6 ;THIS INSTRUCTION MAY JUMP.
PTYPE==1B7 ;THIS INSTRUCTION IS PC-SENSITIVE.
ILLTYPE==1B8 ;ILLEGAL INSTRUCTION IF EFFECTIVE ADDRESS IS IN HISEG.
COD: BLOCK 4000 ;THE JSR TABLE.
USE: BLOCK 4000 ;BIT TABLE OF USAGE.; AN IMAGE OF 400000-404000.
OPTAB: ;TABLE OF BITS ILLUSTRATING OP CODES.
REPEAT 40,<Z> ;LUUO'S
MTYPE ;CALL
PTYPE!ILLTYPE ;INIT NOTE: THIS IS IMPERFECT!
REPEAT 5,<ILLTYPE> ;UUO'S 42-46
ILLTYPE ;CALLI NOTE: THIS IS IMPERFECT!
MTYPE!DTYPE!ILLTYPE ;OPEN NOTE: THIS IS IMPERFECT!
STYPE ;TTCALL
REPEAT 3,<ILLTYPE> ;UUO'S 52-54
MTYPE!DTYPE!LTYPE ;RENAME
ILLTYPE ;IN
ILLTYPE ;OUT
Z ;SETSTS
Z ;STATO
MTYPE ;GETSTS
Z ;STATZ
Z ;INBUF
Z ;OUTBUF
ILLTYPE ;INPUT
ILLTYPE ;OUTPUT
Z ;CLOSE
Z ;RELEASE
Z ;MTAPE
MTYPE!ILLTYPE ;UGETF
Z ;USETI
Z ;USETO
MTYPE!DTYPE!LTYPE ;LOOKUP
MTYPE!DTYPE!LTYPE ;ENTER
ILLTYPE ;UJEN
REPEAT 7,<ILLTYPE> ;UNDEFINED UUO'S.
REPEAT 4,<DTYPE!MTYPE> ;DFAD ETC
REPEAT 4,<ILLTYP> ;UNDEFINED
DTYPE!MTYPE ;DMOVE
DTYPE!MTYPE ;DMOVN
MTYPE ;FIX
ILLTYP
DTYPE!MTYPE
DTYPE!MTYPE
REPEAT 4,<MTYPE> ;FIXR ETC
Z
MTYPE ;IBP
REPEAT 4,<BTYPE!MTYPE> ;BYTE POINTERS
REPEAT 4,<
REPEAT 5,<MTYPE>
Z
MTYPE
MTYPE
>;END REPEAT 4 ;FLOATING POINT.
REPEAT 8,<
MTYPE
Z
MTYPE
MTYPE
>;END REPEAT 8 ;MOVES, FIXED POINT MUL,DIV.
Z
Z
Z
JTYPE
Z
Z
Z
ILLTYPE
MTYPE ;EXCH
ILLTYPE!MTYPE ;BLT
JTYPE
JTYPE
JTYPE
JTYPE
BTYPE!MTYPE ;XCT
ILLTYPE ;MAP
JTYPE!PTYPE ;PUSHJ
MTYPE
MTYPE
Z
REPEAT 3,<JTYPE!PTYPE> ;JSR,JSP,JSA
JTYPE
REPEAT 2,<
MTYPE
Z
MTYPE
MTYPE
>;END REPEAT 2 ;ADD,SUB
REPEAT 8,<Z>
REPEAT 8,<MTYPE>
REPEAT 3,<
REPEAT 8,<JTYPE>
REPEAT 8,<MTYPE>
>;END REPEAT 3 ;JUMP,SKIP,AOJ,AOS,SOJ,SOS
REPEAT 3,<
Z
Z
MTYPE
MTYPE
REPEAT 4,<
MTYPE
Z
MTYPE
MTYPE
>;END REPEAT 4 ;AND,ANDCA,SETM,ANDCM
>;END REPEAT 3 ;RIGHT UP TO ORCBB
Z
Z
MTYPE
MTYPE
REPEAT 20,<
MTYPE
Z
MTYPE
MTYPE
>;END REPEAT 20 ;HALF WORDS.
REPEAT 4,<
REPEAT 8,<Z>
REPEAT 8,<MTYPE>
>;END REPEAT 4 ;TEST INSTRUCTIONS.
REPEAT 100,<ILLTYPE>
TTCTAB: ;TABLE OF BITS FOR TTCALL UUO.
REPEAT 3,<MTYPE> ;INCHRW,OUTCHR,INCHRS
STYPE!MTYPE ;OUTSTR
REPEAT 4,<MTYPE> ;INCHWL,INCHSL,GETLCH,SETLCH
REPEAT 5,<Z> ;RESCAN,CLRBFI,CLRBFO,SKPINC,SKPINL
MTYPE ;IONEOU
REPEAT 2,<Z> ;RESERVED FOR EXPANSION.
BEGIN: RESET
MOVE CA,41 ;MODIFY THE UUO TRAP LOCATION.
SUBI CA,400000
ADDI CA,COD ;GO TO THE SIMULATED HANDLER.
MOVEM CA,41
MOVEI CA,STRP.H ;PRE-SET TO HANDLE OUR OWN TRAPS.
MOVEM CA,.JBAPR##
MOVE CA,[JSR DECODE]
MOVEM CA,COD ;SET TO FILL SIMULATION SPACE WITH TRAPS.
MOVE CA,[XWD COD,COD+1]
BLT CA,COD+3777 ;FILL HIGH SEGMENT WITH TRAPS.
SKIPA CA,.+1 ;PICK UP ENTRY TO SIMULATOR
JRST COD+10 ;CORRESPONDS TO ONCE IMAGE.
MOVEM CA,FNEWEX## ;GO THERE WHEN DONE FNEWGO.
JRST FNEWGO## ;GO AND FIND FOCAL.SHR
;ROUTINE TO RETURN EITHER:
;1. THE NUMBER OF REFERENCES IN THE USAGE TABLE [FNEW(-1)], OR
;2. THE POSSIBLE SCORE, [CALLED BY FNEW(0)], OR
;3. THE RELATIVE LOCATION OF THE NEXT UNREFERENCED LOCATION AFTER
; THE ONE GIVEN BY THE ARGUMENT [POSITIVE ARGUMENT].
FNEW:: HLRZ 0,400000+.JBHRN## ;GET SIZE OF HIGH SEGMENT.
SUBI 0,10 ;SUBTRACT VESTIGIAL JOB DATA AREA.
SKIPN 1,@0(16) ;WAS THE ARGUMENT ZERO?
JRST FNEW2 ;YES.
JUMPL 1,FNEW1 ;REQUIRE NEXT RELATIVE LOCATION?
FIXR 1,1 ;OBTAIN FIXED-POINT ANSWER.
ANDI 1,7777 ;YES. RESTRICT ARGUMENT TO 4K WORDS.
SKIPGE USE+1(1) ;HAS THE NEXT LOCATION BEEN REFERENCED?
AOJA 1,.-1 ;YES.
MOVE 0,1
AOJA 0,FNEW2 ;POINT TO THE NEXT RELATIVE LOCATION.
FNEW1: MOVE 1,[-4000,,USE]
SETZM 0 ;COUNT IN HERE.
SKIPE (1)
AOS 0
AOBJN 1,.-2
FNEW2: FSC 0,233 ;FLOAT THE ANSWER.
SETZM 1 ;MAKE IT DOUBLE-PRECISION.
POPJ 17, ;RETURN.
SUBTTL INSTRUCTION SIMULATOR SECTION 1: EFFECTIVE ADDRESS CALCULATION.
DECODE: 0 ;COME HERE FROM SIMULATION SPACE.
MOVE CA,DECODE ;SAVE PC OF TRAP.
SUBI CA,COD
ADDI CA,400000 ;POINT TO THE HIGH SEGMENT.
MOVEM CA,SIMPC1 ;SAVE THE SIMULATION OF THE PC.
MOVEM CA,SIMPC
SOS CA,SIMPC ;POINT TO THE INSTRUCTION BEING SIMULATED.
SOS USE-400000(CA) ;MARK THE USAGE.
MOVE CA,@SIMPC ;GET THE INSTRUCTION BEING SIMULATED.
MOVEM CA,LASTEF ;SAVE FOR JRSTF FLAGS.
TLZ CA,777740 ;CLEAR SPACE FOR THE TYPE BITS.
MOVEM CA,EFFADD ;SAVE FOR THE EFFECTIVE ADDRESS CALCULATION.
LDB CA,PSIMOP ;GET OP CODE.
HLLZ CA,OPTAB(CA) ;GET NATURE OF THE OPCODE.
IORB CA,EFFADD ;GET EFFECTIVE ADDRESS IN CA.
SETZM VARIAB ;MARK EFFECTIVE ADDRESS FIXED.
MOREFF: LDB CA,[POINT 4,EFFADD,17] ;GET INDEX FIELD.
JUMPE CA,EFF1 ;SKIP ALL THIS IF NO INDEX FIELD.
HLLOS VARIAB ;MARK VARIABLE EFFECTIVE ADDRESS.
HRR CA,(CA) ;GET CONTENTS OF INDEX REGISTER.
ADD CA,EFFADD ;COMPUTE EFFECTIVE ADDRESS.
HRRM CA,EFFADD ;SAVE RESULT.
EFF1: MOVE CA,EFFADD
TLZ CA,17 ;CLEAR INDEX FIELD.
TLZN CA,20 ;INDIRECT BIT ON?
TLZE CA,(BTYPE) ;NO. BYTE POINTER?
SKIPA
JRST MARK ;NO. COMPUTATION IS COMPLETE.
MOVEM CA,EFFADD ;SAVE THE BTYPE BIT.
TRNN CA,400000 ;YES. INDIRECT A HIGH SEGMENT ADDRESS?
HLLOS VARIAB ;NO. THAT MEANS EFF ADD IS VARIABLE.
TRNN CA,400000 ;YES. INDIRECT A HIGH SEGMENT ADDRESS?
JRST EFF3 ;NO.
SKIPE VARIAB ;IS EFF ADD VARIABLE?
SETOM VARIAB ;YES. VARIABLE HIGH SEGMENT ADDRESS.
SOS USE-400000(CA) ;MARK USAGE.
EFF3: MOVE CA,(CA) ;GET NEW CODE.
MOVEM CA,LASTEF ;SAVE FOR JRSTF FLAGS.
DPB CA,[POINT 23,EFFADD,35] ;SAVE NEXT ADDRESS.
JRST MOREFF ;LOOP FOR MORE EFFECTIVE ADDRESS CALCULATION.
SUBTTL INSTRUCTION SIMULATOR SECTION 2: MARK THE DATA FETCH REFERENCES.
;AT THIS STAGE CA CONTAINS ...
;BIT 0 0 UNUSED
;BITS 2-8 STYPE,MTYPE,DTYPE,LTYPE,JTYPE,PTYPE,ILLTYPE
;BITS 9-12 0 UNUSED
;BITS 13-17 0
;BITS 18-35 EFF ADD OF SIMULATED INSTR. OR BYTE PTR IF ANY.
MARK: TLZN CA,(STYPE) ;TTCALL?
JRST MARK2 ;NO.
MOVEM CA,EFFADD ;STORE WITH ZERO I AND X FIELDS.
LDB CA,PSOPAC ;GET OP CODE AND AC.
HLLZ CA,TTCTAB-1220(CA) ;GET NEW NATURE.
HRR CA,EFFADD ;PRESERVE ADDRESS.
IORB CA,EFFADD ;SAVE IT.
TLZE CA,(STYPE) ;OUTSTR?
TRNN CA,400000 ;IS EFFECTIVE ADDRESS IN LO SEG?
JRST MARK2 ;NO.
HRLI CA,(POINT 7,,) ;MAKE A BYTE POINTER.
MOVEM CA,BYTADD ;SAVE THE POINTER.
MARK1: IBP BYTADD ;POINT TO NEXT BYTE.
MOVE CA,BYTADD ;GET THE BYTE POINTER.
SOS USE-400000(CA) ;FLAG THE REFERENCE.
LDB CA,BYTADD ;GET THE NEXT BYTE.
JUMPN CA,MARK1 ;LOOP UNTIL NUL BYTE.
MOVE CA,EFFADD
MARK2: MOVEM CA,EFFADD
TRNN CA,400000 ;IS EFFECTIVE ADDRESS IN LO SEG?
JRST CRESIM ;IGNORE MTYPE IF LO SEG EFFECTIVE ADDR.
TLNE CA,(ILLTYPE)
HALT ILLEGAL INSTRUCTION.
TLNN CA,(MTYPE) ;WILL IT REFERENCE MEMORY?
JRST CRESIM ;NO.
SOS USE-400000(CA) ;MARK MEMORY REFERENCE.
SKIPE VARIAB ;EFF ADD VARIABLE?
SETOM VARIAB ;YES. AND REFERENCING HIGH SEGMENT.
TLNE CA,(DTYPE) ;DOUBLE PRECISION?
SOS USE-400000+1(CA) ;MARK E+1.
TLNE CA,(LTYPE) ;LOOKUP ENTER OR RENAME?
SOS USE-400000+2(CA) ;MARK E+2
TLNE CA,(LTYPE) ;LOOKUP ENTER OR RENAME?
SOS USE-400000+3(CA) ;ASSUME SHORT LOOKUP.
SUBTTL INSTRUCTION SIMULATOR SECTION 3: CREATE THE SIMULATION INSTRUCTION.
CRESIM: MOVE CA,@SIMPC ;GET THE INSTRUCTION WE'RE SIMULATING.
MOVEM CA,SIMINSTR ;SAVE AS INSTRUCTION TO BE EXECUTED.
MOVE CA,EFFADD ;GET SOME FLAG BITS.
TLNN CA,(JTYPE) ;IS THIS A JUMP INSTRUCTION?
JRST CRSIM1 ;NO.
; LDB CA,PSOPAC ;PICK OP CODE AND AC OF SIMULATED INSTR.
; CAIN CA,<JFCL>_-27 ;IS IT JFCL 0?
; JRST CRSIM1 ;YES.
; MOVE CA,EFFADD
; TRZN CA,400000 ;JUMP TO LOW SEGMENT?
; HALT JUMP TO LOW SEGMENT.
TRZE CA,400000 ;JUMP TO LOW SEGMENT?
ADDI CA,COD
HLL CA,SIMINSTR ;GET REST OF THE INSTRUCTION.
TLZ CA,37 ;REMOVE H AND X FIELDS.
MOVEM CA,SIMINSTR ;SAVE.
SKIPE VARIAB ;JUMP TO VARIABLE ADDRESS?
SETOM VARIAB ;YES. SIMULATE EVERY TIME.
TLC CA,(JRSTF) ;CHECK AGAINST JRSTF.
TLNE CA,777777 ;IS IT JRSTF?
JRST CRSIM1 ;NO.
HLL CA,LASTEF ;YES. GET FLAGS.
JRSTF @CA ;RESTORE FLAGS AND JUMP.
CRSIM1: TLNE CA,(MTYPE) ;IS THIS A MEMORY REFERENCE INSTRUCTION?
TRNE CA,777600 ;YES. LOW SEGMENT JOB DATA AREA?
JRST CRSIM3 ;NO.
HRRZS CA ;GET THE ACTUAL MEMORY REFERENCE.
CAIE CA,.JBREN## ;IS IT REFERENCING .JBREN?
CAIN CA,.JBSA## ; OR .JBSA?
JRST CRSIM2 ;YES.
CAIE CA,.JBAPR## ;IS IT A SET-UP?
JRST CRSIM3 ;NO.
MOVEI CA,SIMAPR ;YES. MAKE IT USE A DIFFERENT LOCATION.
DPB CA,PINS22 ;CHANGE THE SIMULATION IN ACCORDANCE.
JRST CRSIM3
CRSIM2: ;HERE IF THE INSTRUCTION REFERENCES .JBSA OR .JBREN.
MOVE CA,SIMINSTR ;GET THE INSTRUCTION.
TLC CA,500000 ;CHECK IF IT'S A HALF-WORD INSTRUCTION
TLNE CA,700000 ;IS IT?
HALT NON-HALF-WORD INSTRUCTION REFERENCES .JBSA OR .JBREN
TLNE CA,040000 ;IS IT STORING IN RIGHT HALF?
TLNN CA,002000 ;IS IT STORING IN EFFECTIVE ADDRESS?
JRST CRSIM3 ;NO.
TLNN CA,004000 ;FROM RIGHT HALF?
TLNE CA,001000 ;YES. M-MODE?
HALT ILLEGAL STORE INTO .JBSA OR .JBREN
LDB CA,PSIMAC ;O.K. GET THE SIMULATED ACCUMULATOR.
HRL CA,(CA) ;GET THE DATA.
JUMPGE CA,.-3 ;ENSURE WE KNOW WHAT WE'RE DOING.
ADD CA,[XWD COD-400000,0]
HLRM CA,(CA) ;STORE THE DATA.
CRSIM3: LDB CA,PSIMOP ;GET THE OP CODE.
CAIG CA,37
JRST XLUUO
CAIN CA,<CALLI>_-33
JRST XCALLI
CAIN CA,<PUSHJ>_-33
JRST XPUSHJ
CAIN CA,<POPJ>_-33
JRST XPOPJ
CAIN CA,<JSP>_-33
JRST XJSP
HLL CA,OPTAB(CA) ;GET NATURE OF OP CODE.
TLNE CA,(BTYPE) ;IS IT A BYTE INSTRUCTION?
SETOM VARIAB ;THERE IS ONE THAT SWITCHES EFF ADD FROM LO TO HI SEG.
TLNN CA,(PTYPE) ;PC-SENSITIVE INSTRUCTION?
JRST SIMUL ;NO.
HALT SIMULATION FAILS ON UNEXPECTED PC-SENSITIVE INSTR.
XLUUO: HLRO CA,@SIMPC ;GET THE INDIRECT BIT OF THE UUO ITSELF.
TRNN CA,(@) ;IS THE INDIRECT BIT ON?
SETZB CA,VARIAB ;NO. NO NEED TO CONTINUE SIMULATION.
MOVE CA,SIMPC ;GET THE ADDRESS OF THE ACTUAL UUO.
HRLI CA,(JRST) ;PREPARE TO EXECUTE THE UUO FROM THE HIGH SEG
MOVEM CA,SIMINSTR
JRST SIMUL
XCALLI: HRRZ CA,EFFADD ;GET THE NUMBER OF THE CALLI.
CAIG CA,115 ;IGNORE ALL CALLI'S LESS THAN TRMOP.
JRST SIMUL
LDB CA,PSIMAC ;GET THE SIMULATED INSTRUCTION'S AC.
MOVE CA,(CA) ;GET THE CONTENTS OF THAT AC.
TRZN CA,400000 ;DOES IT POINT TO THE HIGH SEGMENT?
JRST SIMUL ;NO.
TLC CA,777777 ;MAKE THE LENGTH NEGATIVE.
SOS USE(CA) ;MARK A DATA REFERENCE.
AOBJN CA,.-1
JRST SIMUL
SUBTTL INSTRUCTION SIMULATOR SECTION 4: STORE THE SIMINSTR AND DO IT.
SIMUL: SKIPGE VARIAB ;NO. VARIABLE HIGH SEGMENT REFERENCE?
JRST SIMUL4 ;YES. CAREFUL SIMULATION NEEDED.
SOS DECODE ;POINT TO THE SPOT IN CODE TABLE.
MOVE CA,SIMINSTR ;YES. GET MODIFIED INSTRUCTION.
MOVEM CA,@DECODE
JRST @DECODE
SIMUL4: XCT SIMINSTR
JRST @DECODE ;THEN CONTINUE.
AOS DECODE ;UNLESS THE INSTRUCTION SKIPPED.
JRST @DECODE
XPOPJ: HLRZ CA,SIMINSTR ;GET INSTR BEING SIMULATED.
CAIE CA,(POPJ 17,) ;PRESUMABLY FOCAL ALWAYS USES 17.
HALT POPJ WITH NON-STANDARD ARGUMENT.
MOVE CA,[JRST DOPOPJ]
MOVEM CA,SIMINSTRUCTION
JRST SIMUL ;STORE A SHORT CUT.
DOPOPJ: POP 17,CA ;REMOVE ONE FROM THE STACK.
TRZE CA,400000 ;RELATIVE TO BEGINNING OF CODE.
ADDI CA,COD ;SIMULATED CODE.
JRST (CA)
XPUSHJ: MOVE CA,SIMINSTR ;GET INSTR BEING SIMULATED.
TLC CA,(<PUSHJ>^!<PUSH>)
JRST XJRST
XJSP: MOVE CA,SIMINSTR ;GET INSTR BEING SIMULATED.
TLC CA,(<JSP>^!<MOVE>)
XJRST: TLZ CA,37 ;REMOVE I AND X FIELDS.
HRRI CA,SIMPC1 ;POINT TO THE CURRENT SIMULATED PC.
XCT CA
JRST @SIMINSTRUCTION
STRP.H: HRRE CA,.JBTPC## ;WHERE DID THE TRAP COME FROM?
CAIG CA,COD+4000 ;ABOVE SIMULATED CODE?
CAIG CA,COD ;NO. BELOW SIMULATED CODE?
JRST STRPH1 ;YES. AVOID SIMULATION.
SUBI CA,COD-400000 ;NO. PRETEND THAT WE DID.
HRRM CA,.JBTPC## ;PUT A SIMULATION THERE.
STRPH1: SKIPN CA,SIMAPR
HALT A TRAP OCCURRED WITHOUT .JBAPR SET UP
TRZE CA,400000 ;DID HE THINK IT WAS THE HIGH SEGMENT?
ADDI CA,COD ;YES. THAT'S O.K. LET HIM THINK THAT.
JRST @CA
PINS22: POINT 23,SIMINS,35 ;COVER I X AND E FIELDS.
PSIMOP: POINT 9,@SIMPC,8 ;THE OP CODE OF THE SIMULATED INSTRUCTION.
PSIMAC: POINT 4,@SIMPC,12 ;THE AC OF THE SIMULATED INSTRUCTION.
PSOPAC: POINT 13,@SIMPC,12 ;THE OP CODE AND AC OF THE SIMULATED INSTR.
VARIAB: BLOCK 1 ;ZERO MEANS EFFECTIVE ADDRESS IS CONSTANT.
LASTEF: BLOCK 1 ;THE LAST ADDRESS REFERENCED DURING EFF ADD CALC.
EFFADD: BLOCK 1 ;BUILD EFFECTIVE ADDRESS OF THE SIMULATED INSTR.
;BITS 0-12 SHOW THE TYPE OF INSTRUCTION.
BYTADD: BLOCK 1 ;TEMPORARY STORAGE.
SIMAPR: BLOCK 1 ;PLACE TO SIMULATE CONTENTS OF .JBAPR
;NON-ZERO MEANS EFF ADD IS VARIABLE.
;NEGATIVE MEANS A VARIABLE HIGH SEG REFERENCE IS INVOLVED.
SIMPC: BLOCK 1 ;POINT TO THE INSTRUCTION BEING SIMULATED.
SIMPC1: BLOCK 1 ;POINT TO THE INSTRUCTION AFTER THE ONE BEING SIMULATED.
SIMINS: BLOCK 1 ;MAKE THE INSTRUCTION WHICH WE SIMULATE.
END BEGIN