Bind ! A DISPATCH PLIT FOR THE INSTRUCTION-SPECIFIC ROUTINES OPTROUTINE = Uplit Long ( NXTLCC, ! UUO OPT_MOV, ! MOV OPT_MOV, ! MOVB OPT_CMP, ! CMP OPT_CMP, ! CMPB OPT_BIT, ! BIT OPT_BIT, ! BITB OPT_BIC, ! BIC OPT_BIC, ! BICB OPT_BIS, ! BIS OPT_BIS, ! BISB OPT_ADDSUB, ! ADD OPT_ADDSUB, ! SUB OPT_CLR, ! CLR OPT_CLR, ! CLRB NXTLCC, ! COM NXTLCC, ! COMB OPT_INC, ! INC NXTLCC, ! INCB OPT_DEC, ! DEC NXTLCC, ! DECB NXTLCC, ! NEG NXTLCC, ! NEGB NXTLCC, ! ADC NXTLCC, ! ADCB NXTLCC, ! SBC NXTLCC, ! SBCB OPT_TST, ! TST OPT_TST, ! TSTB NXTLCC, ! ROR NXTLCC, ! RORB NXTLCC, ! ROL NXTLCC, ! ROLB NXTLCC, ! ASR NXTLCC, ! ASRB NXTLCC, ! ASL NXTLCC, ! ASLB PUNCONDJMP, ! JMP NXTLCC, ! SWAB OPT_JSR, ! JSR NXTLCC, ! RTS NXTLCC, ! HALT NXTLCC, ! WAIT NXTLCC, ! RTI NXTLCC, ! IOT NXTLCC, ! RESET NXTLCC, ! EMT NXTLCC, ! TRAP PUNCONDJMP, ! BR DELETE, ! NBR PCONDJMP, ! PBNE PCONDJMP, ! PBEQ PCONDJMP, ! PBGE PCONDJMP, ! PBLT PCONDJMP, ! PBLE PCONDJMP, ! PBGT PCONDJMP, ! PBPL PCONDJMP, ! PBMI PCONDJMP, ! PBHI PCONDJMP, ! PBLOS PCONDJMP, ! PBVC PCONDJMP, ! PBVS PCONDJMP, ! PBHIS PCONDJMP, ! PBLO NXTLCC, ! NOP OPT_CLC, ! CLC OPT_CLVC, ! CLVC NXTLCC, ! .WORD PCASPARAM, ! CASEPARAMETER (PCASE) NXTLCC, ! MFPI NXTLCC, ! MFPD NXTLCC, ! MTPI NXTLCC, ! MTPD NXTLCC, ! INFLOOPOP NXTLCC) ! SETEQLOP : Vector[,Long]; ! EACH OF THE FOLLOWING PLITS RETURNS INFORMATION ABOUT SPECIFIC ! INSTRUCTIONS -- AND IS INDEXED BY INSTRUCTION TYPE. ! .ALTERSRCDST[.I] <=> INSTRUCTION #I ALTERS ITS SOURCE OR DESTINATION ! WHEN EXECUTED. Global Bind ALTERSRCDST = Uplit Byte ( 0, ! UUO 1, ! MOV 1, ! MOVB 0, ! CMP 0, ! CMPB 0, ! BIT 0, ! BITB 1, ! BIC 1, ! BICB 1, ! BIS 1, ! BISB 1, ! ADD 1, ! SUB 1, ! CLR 1, ! CLRB 1, ! COM 1, ! COMB 1, ! INC 1, ! INCB 1, ! DEC 1, ! DECB 1, ! NEG 1, ! NEGB 1, ! ADC 1, ! ADCB 1, ! SBC 1, ! SBCB 0, ! TST 0, ! TSTB 1, ! ROR 1, ! RORB 1, ! ROL 1, ! ROLB 1, ! ASR 1, ! ASRB 1, ! ASL 1, ! ASLB 0, ! JMP 1, ! SWAB 0, ! JSR 0, ! RTS 0, ! HALT 0, ! WAIT 0, ! RTI 0, ! IOT 0, ! RESET 0, ! EMT 0, ! TRAP 0, ! BR 0, ! NBR 0, ! PBNE 0, ! PBEQ 0, ! PBGE 0, ! PBLT 0, ! PBLE 0, ! PBGT 0, ! PBPL 0, ! PBMI 0, ! PBHI 0, ! PBLOS 0, ! PBVC 0, ! PBVS 0, ! PBHIS 0, ! PBLO 0, ! NOP 0, ! CLC 0, ! CLVC 0, ! .WORD 0, ! CASEPARAMETER (PCASE) 0, ! MFPI 0, ! MFPD 0, ! MTPI 0, ! MTPD 0, ! INFLOOPOP 0) ! SETEQLOP : Vector[,Byte]; Global Bind OPBYTES = Uplit Byte ( 0, ! UUO 2, ! MOV 1, ! MOVB 2, ! CMP 1, ! CMPB 2, ! BIT 1, ! BITB 2, ! BIC 1, ! BICB 2, ! BIS 1, ! BISB 2, ! ADD 2, ! SUB 2, ! CLR 1, ! CLRB 2, ! COM 1, ! COMB 2, ! INC 1, ! INCB 2, ! DEC 1, ! DECB 2, ! NEG 1, ! NEGB 2, ! ADC 1, ! ADCB 2, ! SBC 1, ! SBCB 2, ! TST 0, ! TSTB 2, ! ROR 1, ! RORB 2, ! ROL 1, ! ROLB 2, ! ASR 1, ! ASRB 2, ! ASL 1, ! ASLB 0, ! JMP 2, ! SWAB 0, ! JSR 0, ! RTS 0, ! HALT 0, ! WAIT 0, ! RTI 0, ! IOT 0, ! RESET 0, ! EMT 0, ! TRAP 0, ! BR 0, ! NBR 0, ! PBNE 0, ! PBEQ 0, ! PBGE 0, ! PBLT 0, ! PBLE 0, ! PBGT 0, ! PBPL 0, ! PBMI 0, ! PBHI 0, ! PBLOS 0, ! PBVC 0, ! PBVS 0, ! PBHIS 0, ! PBLO 0, ! NOP 0, ! CLC 0, ! CLVC 0, ! .WORD 0, ! CASEPARAMETER (PCASE) 0, ! MFPI 0, ! MFPD 0, ! MTPI 0, ! MTPD 0, ! INFLOOPOP 0) ! SETEQLOP : Vector[,Byte]; Global Bind OPERTYPE = Uplit Byte ( OPTYPE_NOP, ! UUO OPTYPE_TWO, ! MOV OPTYPE_TWO, ! MOVB OPTYPE_TWO, ! CMP OPTYPE_TWO, ! CMPB OPTYPE_TWO, ! BIT OPTYPE_TWO, ! BITB OPTYPE_TWO, ! BIC OPTYPE_TWO, ! BICB OPTYPE_TWO, ! BIS OPTYPE_TWO, ! BISB OPTYPE_TWO, ! ADD OPTYPE_TWO, ! SUB OPTYPE_ONE, ! CLR OPTYPE_ONE, ! CLRB OPTYPE_ONE, ! COM OPTYPE_ONE, ! COMB OPTYPE_ONE, ! INC OPTYPE_ONE, ! INCB OPTYPE_ONE, ! DEC OPTYPE_ONE, ! DECB OPTYPE_ONE, ! NEG OPTYPE_ONE, ! NEGB OPTYPE_ONE, ! ADC OPTYPE_ONE, ! ADCB OPTYPE_ONE, ! SBC OPTYPE_ONE, ! SBCB OPTYPE_ONE, ! TST OPTYPE_ONE, ! TSTB OPTYPE_ONE, ! ROR OPTYPE_ONE, ! RORB OPTYPE_ONE, ! ROL OPTYPE_ONE, ! ROLB OPTYPE_ONE, ! ASR OPTYPE_ONE, ! ASRB OPTYPE_ONE, ! ASL OPTYPE_ONE, ! ASLB OPTYPE_BR, ! JMP OPTYPE_ONE, ! SWAB OPTYPE_JSR, ! JSR OPTYPE_RTS, ! RTS OPTYPE_NOP, ! HALT OPTYPE_NOP, ! WAIT OPTYPE_NOP, ! RTI OPTYPE_NOP, ! IOT OPTYPE_NOP, ! RESET OPTYPE_TRAP, ! EMT OPTYPE_TRAP, ! TRAP OPTYPE_BR, ! BR OPTYPE_BR, ! NBR OPTYPE_BR, ! PBNE OPTYPE_BR, ! PBEQ OPTYPE_BR, ! PBGE OPTYPE_BR, ! PBLT OPTYPE_BR, ! PBLE OPTYPE_BR, ! PBGT OPTYPE_BR, ! PBPL OPTYPE_BR, ! PBMI OPTYPE_BR, ! PBHI OPTYPE_BR, ! PBLOS OPTYPE_BR, ! PBVC OPTYPE_BR, ! PBVS OPTYPE_BR, ! PBHIS OPTYPE_BR, ! PBLO OPTYPE_NOP, ! NOP OPTYPE_NOP, ! CLC OPTYPE_NOP, ! CLVC OPTYPE_WORD, ! .WORD OPTYPE_CASE, ! CASEPARAMETER (PCASE) OPTYPE_ONE, ! MFPI OPTYPE_ONE, ! MFPD OPTYPE_ONE, ! MTPI OPTYPE_ONE, ! MTPD OPTYPE_NOP, ! INFLOOPOP OPTYPE_NOP) ! SETEQLOP : Vector[,Byte]; ! .STOPFSCAN[.I] <=> INSTRUCTION #I ACTS AS A STOP OR BLOCK ! TO ANY FURTHER FORWARD CODE SCANNING BY VARIOUS ROUTINES, ! GENERALLY BECAUSE OF A POSSIBLE CONTROL TRANSFER. Bind STOPFSCAN = Uplit Byte ( 1, ! UUO 0, ! MOV 0, ! MOVB 0, ! CMP 0, ! CMPB 0, ! BIT 0, ! BITB 0, ! BIC 0, ! BICB 0, ! BIS 0, ! BISB 0, ! ADD 0, ! SUB 0, ! CLR 0, ! CLRB 0, ! COM 0, ! COMB 0, ! INC 0, ! INCB 0, ! DEC 0, ! DECB 0, ! NEG 0, ! NEGB 0, ! ADC 0, ! ADCB 0, ! SBC 0, ! SBCB 0, ! TST 0, ! TSTB 0, ! ROR 0, ! RORB 0, ! ROL 0, ! ROLB 0, ! ASR 0, ! ASRB 0, ! ASL 0, ! ASLB 1, ! JMP 0, ! SWAB 1, ! JSR 1, ! RTS 1, ! HALT 0, ! WAIT 1, ! RTI 1, ! IOT 0, ! RESET 1, ! EMT 1, ! TRAP 1, ! BR 0, ! NBR 0, ! PBNE 0, ! PBEQ 0, ! PBGE 0, ! PBLT 0, ! PBLE 0, ! PBGT 0, ! PBPL 0, ! PBMI 0, ! PBHI 0, ! PBLOS 0, ! PBVC 0, ! PBVS 0, ! PBHIS 0, ! PBLO 0, ! NOP 0, ! CLC 0, ! CLVC 1, ! .WORD 1, ! CASEPARAMETER (PCASE) 1, ! MFPI 1, ! MFPD 1, ! MTPI 1, ! MTPD 1, ! INFLOOPOP 0) ! SETEQLOP : Vector[,Byte]; ! .STOPBSCAN[.I] <=> INSTRUCTION #I ACTS AS A STOP OR BLOCK ! TO ANY FURTHER BACKWARD CODE SCANNING BY VARIOUS ROUTINES, ! GENERALLY BECAUSE OF A POSSIBLE CONTROL TRANSFER. Bind STOPBSCAN = Uplit Byte ( 1, ! UUO 0, ! MOV 0, ! MOVB 0, ! CMP 0, ! CMPB 0, ! BIT 0, ! BITB 0, ! BIC 0, ! BICB 0, ! BIS 0, ! BISB 0, ! ADD 0, ! SUB 0, ! CLR 0, ! CLRB 0, ! COM 0, ! COMB 0, ! INC 0, ! INCB 0, ! DEC 0, ! DECB 0, ! NEG 0, ! NEGB 0, ! ADC 0, ! ADCB 0, ! SBC 0, ! SBCB 0, ! TST 0, ! TSTB 0, ! ROR 0, ! RORB 0, ! ROL 0, ! ROLB 0, ! ASR 0, ! ASRB 0, ! ASL 0, ! ASLB 1, ! JMP 0, ! SWAB 1, ! JSR 1, ! RTS 1, ! HALT 0, ! WAIT 1, ! RTI 1, ! IOT 0, ! RESET 1, ! EMT 1, ! TRAP 1, ! BR 1, ! NBR 1, ! PBNE 1, ! PBEQ 1, ! PBGE 1, ! PBLT 1, ! PBLE 1, ! PBGT 1, ! PBPL 1, ! PBMI 1, ! PBHI 1, ! PBLOS 1, ! PBVC 1, ! PBVS 1, ! PBHIS 1, ! PBLO 0, ! NOP 0, ! CLC 0, ! CLVC 1, ! .WORD 1, ! CASEPARAMETER (PCASE) 1, ! MFPI 1, ! MFPD 1, ! MTPI 1, ! MTPD 1, ! INFLOOPOP 0) ! SETEQLOP : Vector[,Byte]; Literal ______ = 0, _____N = 1, ____Z_ = 2, ___V__ = 4, __C___ = 8, __CV__ = 12, _J____ = 16, _J__Z_ = 18, _J_V_N = 21, _J_VZN = 23, _J___N = 17, _JC_Z_ = 26, __C_Z_ = 10, _JC___ = 24, _J_V__ = 20, ___VZN = 7, ____ZN = 3, ___V_N = 5, X_____ = 32, __CVZN = 15; ! INDICATES FOR EACH INSTRUCTION ! (1) WHAT PDP-11 CONDITION CODES IT USES, ! (2) WHETHER OR NOT IT IS A BRANCH, ! (3) WHETHER OR NOT IT AFFECTS THE CARRY BIT (IF IT'S NOT A BRANCH). Bind CCUSETYPE = Uplit Word ( __CVZN+CCSHIFT(__CVZN), ! UUO X_____+CCSHIFT(______), ! MOV X_____+CCSHIFT(______), ! MOVB ______+CCSHIFT(______), ! CMP ______+CCSHIFT(______), ! CMPB X_____+CCSHIFT(______), ! BIT X_____+CCSHIFT(______), ! BITB X_____+CCSHIFT(______), ! BIS X_____+CCSHIFT(______), ! BISB X_____+CCSHIFT(______), ! BIC X_____+CCSHIFT(______), ! BICB ______+CCSHIFT(______), ! ADD ______+CCSHIFT(______), ! SUB ______+CCSHIFT(______), ! CLR ______+CCSHIFT(______), ! CLRB ______+CCSHIFT(______), ! COM ______+CCSHIFT(______), ! COMB X_____+CCSHIFT(______), ! INC X_____+CCSHIFT(______), ! INCB X_____+CCSHIFT(______), ! DEC X_____+CCSHIFT(______), ! DECB ______+CCSHIFT(______), ! NEG ______+CCSHIFT(______), ! NEGB __C___+CCSHIFT(__C___), ! ADC __C___+CCSHIFT(__C___), ! ADCB __C___+CCSHIFT(__C___), ! SBC __C___+CCSHIFT(__C___), ! SBCB ______+CCSHIFT(______), ! TST ______+CCSHIFT(______), ! TSTB __C___+CCSHIFT(______), ! ROR __C___+CCSHIFT(______), ! RORB __C___+CCSHIFT(______), ! ROL __C___+CCSHIFT(______), ! ROLB ______+CCSHIFT(______), ! ASR ______+CCSHIFT(______), ! ASRB ______+CCSHIFT(______), ! ASL ______+CCSHIFT(______), ! ASLB _J____+CCSHIFT(______), ! JMP ______+CCSHIFT(______), ! SWAB __CVZN+CCSHIFT(______), ! JSR __CVZN+CCSHIFT(______), ! RTS __CVZN+CCSHIFT(______), ! HALT __CVZN+CCSHIFT(______), ! WAIT __CVZN+CCSHIFT(______), ! RTI __CVZN+CCSHIFT(______), ! IOT __CVZN+CCSHIFT(______), ! RESET __CVZN+CCSHIFT(______), ! EMT __CVZN+CCSHIFT(______), ! TRAP _J____+CCSHIFT(______), ! BR __CVZN+CCSHIFT(______), ! NBR _J__Z_+CCSHIFT(____Z_), ! BNE _J__Z_+CCSHIFT(____Z_), ! BEQ _J_V_N+CCSHIFT(___V_N), ! BGE _J_V_N+CCSHIFT(___V_N), ! BLT _J_VZN+CCSHIFT(___VZN), ! BLE _J_VZN+CCSHIFT(___VZN), ! BGT _J___N+CCSHIFT(_____N), ! BPL _J___N+CCSHIFT(_____N), ! BMI _JC_Z_+CCSHIFT(__C_Z_), ! BHI _JC_Z_+CCSHIFT(__C_Z_), ! BLOS _J_V__+CCSHIFT(___V__), ! BVC _J_V__+CCSHIFT(___V__), ! BVS _JC___+CCSHIFT(__C___), ! BHIS _JC___+CCSHIFT(__C___), ! BLO __CVZN+CCSHIFT(______), ! NOP ___VZN+CCSHIFT(___VZN), ! CLC ____ZN+CCSHIFT(____ZN), ! CLVC __CVZN+CCSHIFT(______), ! WORD __CVZN+CCSHIFT(______), ! CASE X_____+CCSHIFT(______), ! MFPI X_____+CCSHIFT(______), ! MFPD X_____+CCSHIFT(______), ! MTPI X_____+CCSHIFT(______), ! MTPD ______+CCSHIFT(______), ! INFLOOPOP ______+CCSHIFT(______)) ! SETEQLOP : Vector[,Word]; ! .CCSETTYPE[.I] IS A NUMBER INDICATING HOW INSTRUCTION #I ! SETS THE CONDITION CODES. SEE ROUTINE SETSCC. Bind CCSETTYPE = Uplit Byte ( 0, ! UUO 1, ! MOV 1, ! MOVB 0, ! CMP 0, ! CMPB 0, ! BIT 0, ! BITB 2, ! BIC 2, ! BICB 2, ! BIS 2, ! BISB 3, ! ADD 3, ! SUB 4, ! CLR 4, ! CLRB 4, ! COM 4, ! COMB 5, ! INC 5, ! INCB 5, ! DEC 5, ! DECB 5, ! NEG 5, ! NEGB 5, ! ADC 5, ! ADCB 5, ! SBC 5, ! SBCB 4, ! TST 4, ! TSTB 5, ! ROR 5, ! RORB 5, ! ROL 5, ! ROLB 5, ! ASR 5, ! ASRB 5, ! ASL 5, ! ASLB 0, ! JMP 4, ! SWAB 0, ! JSR 0, ! RTS 0, ! HALT 0, ! WAIT 0, ! RTI 0, ! IOT 0, ! RESET 0, ! EMT 0, ! TRAP 0, ! BR 7, ! NBR 7, ! PBNE 7, ! PBEQ 7, ! PBGE 7, ! PBLT 7, ! PBLE 7, ! PBGT 7, ! PBPL 7, ! PBMI 7, ! PBHI 7, ! PBLOS 7, ! PBVC 7, ! PBVS 7, ! PBHIS 7, ! PBLO 0, ! NOP 0, ! CLC 0, ! CLVC 0, ! .WORD 0, ! CASEPARAMETER (PCASE) 6, ! MFPI 6, ! MFPD 6, ! MTPI 6, ! MTPD 0, ! INFLOOPOP 0) ! SETEQLOP : Vector[,Byte];