Trailing-Edge
-
PDP-10 Archives
-
BB-AS80D-SM_1986
-
microcode-sources/skpjmp.mic
There are 5 other files named skpjmp.mic in the archive. Click here to see a list.
.TOC "TEST GROUP"
.DCODE
600: I-PF, J/NOP ;TRN--a noop
I-PF, J/NOP ;TLN <==> TRN
I, TNE, J/TDXX ;TRNE
I, TNE, J/TSXX ;TLNE
I, TNA, J/TDX ;TRNA--unconditional skip
I, TNA, J/TDX ;TLNA <==> TRNA
I, TNN, J/TDXX ;TRNN
I, TNN, J/TSXX ;TLNN
610: R-PF, J/NOP ;TDN--a noop that references memory
R-PF, J/NOP ;TSN <==> TDN
R, TNE, J/TDXX ;TDNE
R, TNE, J/TSXX ;TSNE
R, TNA, J/TDX ;TDNA--skip with memory reference
R, TNA, J/TDX ;TSNA <==> TDNA
R, TNN, J/TDXX ;TDNN
R, TNN, J/TSXX ;TSNN
620: I-PF, AC, J/ANDCM ;TRZ <==> ANDCMI
I-PF, TZ-, J/TLX ;TLZ [440]
I, TZE, J/TDXX ;TRZE
I, TZE, J/TSXX ;TLZE
I, TZA, J/TDX ;TRZA
I, TZA, J/TLXA ;TLZA
I, TZN, J/TDXX ;TRZN
I, TZN, J/TSXX ;TLZN
630: R-PF, AC, J/ANDCM ;TDZ <==> ANDCM
R-PF, TZ-, J/TLX ;TSZ [440]
R, TZE, J/TDXX ;TDZE
R, TZE, J/TSXX ;TSZE
R, TZA, J/TDX ;TDZA
R, TZA, J/TLXA ;TSZA
R, TZN, J/TDXX ;TDZN
R, TZN, J/TSXX ;TSZN
640: I-PF, AC, J/XOR ;TRC <==> XORI
I-PF, TC-, J/TLX ;TLC [440]
I, TCE, J/TDXX ;TRCE
I, TCE, J/TSXX ;TLCE
I, TCA, J/TDX ;TRCA
I, TCA, J/TLXA ;TLCA
I, TCN, J/TDXX ;TRCN
I, TCN, J/TSXX ;TLCN
650: R-PF, AC, J/XOR ;TDC <==> XOR
R-PF, TC-, J/TLX ;TSC [440]
R, TCE, J/TDXX ;TDCE
R, TCE, J/TSXX ;TSCE
R, TCA, J/TDX ;TDCA
R, TCA, J/TLXA ;TSCA
R, TCN, J/TDXX ;TDCN
R, TCN, J/TSXX ;TSCN
660: I-PF, AC, J/IOR ;TRO <==> ORI
I-PF, TO-, J/TLX ;TLO [440]
I, TOE, J/TDXX ;TROE
I, TOE, J/TSXX ;TLOE
I, TOA, J/TDX ;TROA
I, TOA, J/TLXA ;TLOA
I, TON, J/TDXX ;TRON
I, TON, J/TSXX ;TLON
670: R-PF, AC, J/IOR ;TDO <==> OR
R-PF, TO-, J/TLX ;TSO [440]
R, TOE, J/TDXX ;TDOE
R, TOE, J/TSXX ;TSOE
R, TOA, J/TDX ;TDOA
R, TOA, J/TLXA ;TSOA
R, TON, J/TDXX ;TDON
R, TON, J/TSXX ;TSON
.UCODE
;MOST OF THESE 64 INSTRUCTIONS ARE DECODED BY MASK MODE (IMMEDIATE OR
; MEMORY) IN THE A FIELD, DISPATCH TO HERE ON THE J FIELD, AND RE-DISPATCH
; FOR THE MODIFICATION ON THE B FIELD. A few of these are synonyms for
; other instructions, and use the synonym microcode for speed (see above).
; Those that never skip will always prefetch.
; ENTER WITH 0,E OR (E) IN AR, B FIELD BITS 1 AND 2 AS FOLLOWS:
; 0 0 NO MODIFICATION
; 0 1 ZEROS
; 1 0 COMPLEMENT
; 1 1 ONES
; THIS ORDER HAS NO SIGNIFICANCE EXCEPT THAT IT CORRESPONDS TO THE
; ORDER OF INSTRUCTIONS AT TGROUP. THE HIGH ORDER BIT OF THE B FIELD
; (B0) IS XOR'D WITH AD CRY0 TO DETERMINE THE SENSE OF THE SKIP:
; 0 SKIP IF CRY0=1 (TXX- AND TXXN)
; 1 SKIP IF CRY0=0 (TXXA AND TXXE)
213: ;[412][440] Near TLXA/CAIM
TDX: TEST FETCH,NO CRY,B DISP,J/TDN ;TDXA and TRXA
214: ;[412][440] Near TDX
TLXA: AR_AR SWAP,TEST FETCH,NO CRY, ;TSXA and TLXA
B DISP,J/TDN
113: ;[440] Near ANDCM/XOR/IOR
TLX: AR_AR SWAP,NO CRY,B DISP,J/TDN ;[440] TLX and TSX
=0****00***0 ;[412]
TSXX: AR_AR SWAP ;TSXE, TSXN, TLXE, AND TLXN
TDXX: TEST AR.AC0,TEST FETCH,B DISP ;TDXE, TDXN, TRXE, AND TRXN
=
304: ;[412][441]
TDN: J/FINI ;NO MODIFICATION
305: AR_AR*AC0,AD/ANDCA,TIME/2T,J/STAC;[441] ZEROS
306: AR_AR*AC0,AD/XOR,TIME/2T,J/STAC ;[441] COMP
307: AR_AR*AC0,AD/OR,TIME/2T,J/STAC ;[441] ONES
.TOC "COMPARE -- CAI, CAM"
.DCODE
300: I-PF, J/NOP ;CAI <==> TRN
I, SJCL, J/CAIM ;CAIL
I, SJCE, J/CAIM ;CAIE
I, SJCLE, J/CAIM ;CAILE
I, TNA, J/TDX ;CAIA <==> TRNA
I, SJCGE, J/CAIM ;CAIGE
I, SJCN, J/CAIM ;CAIN
I, SJCG, J/CAIM ;CAIG
310: R-PF, J/NOP ;CAM <==> TDN
R, SJCL, J/CAIM ;CAML
R, SJCE, J/CAIM ;CAME
R, SJCLE, J/CAIM ;CAMLE
R, TNA, J/TDX ;CAMA <==> TDNA
R, SJCGE, J/CAIM ;CAMGE
R, SJCN, J/CAIM ;CAMN
R, SJCG, J/CAIM ;CAMG
.UCODE
215: ;[440] Near NOP and TDX
CAIM: GEN AR*AC0,COMP FETCH,J/NOP
.TOC "ARITHMETIC SKIPS -- AOS, SOS, SKIP"
;ENTER WITH (E) IN AR
.DCODE
330: R, J/MOVES ;SKIP--rather like MOVES [440]
R, SJCL, J/SKIP ;SKIPL
R, SJCE, J/SKIP ;SKIPE
R, SJCLE, J/SKIP ;SKIPLE
R, SJCA, J/SKIP ;SKIPA
R, SJCGE, J/SKIP ;SKIPGE
R, SJCN, J/SKIP ;SKIPN
R, SJCG, J/SKIP ;SKIPG
.UCODE
312: ;Must be near MOVES
SKIP: FIN STORE,SKIP FETCH,
SKP AC#0,J/STSELF ;STORE IN SELF MODE
.DCODE
350: RPW, J/AONS ;AOS--never skip [440]
RPW, SJCL, J/AOS ;AOSL
RPW, SJCE, J/AOS ;AOSE
RPW, SJCLE, J/AOS ;AOSLE
RPW, SJCA, J/AOS ;AOSA
RPW, SJCGE, J/AOS ;AOSGE
RPW, SJCN, J/AOS ;AOSN
RPW, SJCG, J/AOS ;AOSG
.UCODE
=0****00***0
AONS: AR_AR+1,AD FLAGS,STORE,J/SLFEND ;[440] AOS only
AOS: AR_AR+1,AD FLAGS,STORE,J/SKIP ;Other AOSx
=
.DCODE
370: RPW, J/SONS ;SOS--never skip [440]
RPW, SJCL, J/SOS ;SOSL
RPW, SJCE, J/SOS ;SOSE
RPW, SJCLE, J/SOS ;SOSLE
RPW, SJCA, J/SOS ;SOSA
RPW, SJCGE, J/SOS ;SOSGE
RPW, SJCN, J/SOS ;SOSN
RPW, SJCG, J/SOS ;SOSG
.UCODE
=0****00***0
SONS: AR_AR-1,AD FLAGS,STORE,J/SLFEND ;[440] SOS only
SOS: AR_AR-1,AD FLAGS,STORE,J/SKIP ;Other SOSx
=
.TOC "CONDITIONAL JUMPS -- JUMP, AOJ, SOJ, AOBJ"
.DCODE
320: I-PF, J/TDN ;JUMP <==> TRN (Do not jump!)
I, SJCL, J/JUMP ;JUMPL
I, SJCE, J/JUMP ;JUMPE
I, SJCLE, J/JUMP ;JUMPLE
I, J/JUMPA ;JUMPA--always jump [441]
I, SJCGE, J/JUMP ;JUMPGE
I, SJCN, J/JUMP ;JUMPN
I, SJCG, J/JUMP ;JUMPG
.UCODE
302: ;[441]
JUMPA: FETCH,J/NOP ;JUMPA only
303: ;Other JUMPx--near TDN
JUMP: AR_AC0,JUMP FETCH,J/NOP ; E IS IN VMA (HERE AND BELOW)
.DCODE
340: I-PF, J/AONJ ;AOJ--never jump [440]
I, SJCL, J/AOJ ;AOJL
I, SJCE, J/AOJ ;AOJE
I, SJCLE, J/AOJ ;AOJLE
I, J/AOJA ;AOJA--always jump [440]
I, SJCGE, J/AOJ ;AOJGE
I, SJCN, J/AOJ ;AOJN
I, SJCG, J/AOJ ;AOJG
.UCODE
=0****00**00
AOJA: FETCH ;[441] AOJA only
AONJ: AR_AC0+1,AD FLAGS,J/STAC ;[440] AOJ only
AOJ: AR_AC0+1,AD FLAGS,JUMP FETCH,J/STORAC;Other AOJx
=
.DCODE
360: I-PF, AC, J/SONJ ;SOJ--never jump [440]
I, SJCL, J/SOJ ;SOJL
I, SJCE, J/SOJ ;SOJE
I, SJCLE, J/SOJ ;SOJLE
I, AC, J/SOJA ;SOJA--always jump [440]
I, SJCGE, J/SOJ ;SOJGE
I, SJCN, J/SOJ ;SOJN
I, SJCG, J/SOJ ;SOJG
.UCODE
=0****00**00
SONJ: AR_1S,J/ADD ;[440] SOJ only--add -1 to AC0
SOJA: AR_1S,FETCH,J/ADD ;[440] SOJA only--add -1 and jump
SOJ: AR_AC0 ;Other SOJx
= AR_AR-1,AD FLAGS,JUMP FETCH,J/STORAC
.DCODE
252: I, SJCGE, J/AOBJ ;AOBJP
I, SJCL, J/AOBJ ;AOBJN
.UCODE
=0****00****
AOBJ: AR_AC0+1,GEN CRY18,JUMP FETCH,J/STORAC
=
.TOC "AC DECODE JUMPS -- JRST"
.DCODE
254: EA, J/JRST ;JRST--must be at JFCL-100
.UCODE
;
; A READ detects JRST, and dispatches to one of 16 loc'ns on AC bits.
; These have been completely rewritten to save space. [414]
; Note that the instruction dispatch must have cleared SC
; for XJRSTF to work.
;
600: ;Multiple of 200, at JFCL-100
JRST: J/FINI ;(0) JRST--A READ has prefetched
601: PORTAL,VMA_AR,FETCH,J/NOP ;(1) PORTAL
602:
JRSTF: SKP PC SEC0,CALL [JRSTOK] ;(2) JRSTF--Must be in section 0
603: J/UUO ;(3)
604:
HALT: SKP KERNEL,CALL [JRSTOK] ;(4) HALT--Must be kernel mode
605: LOAD AR,CALL [GETNXT] ;(5) XJRSTF. Fetch flags
606: SC_1S,SKP IO LEGAL,J/HALT ;(6) XJEN. Set switch
607: ARX_PC+1,SKP IO LEGAL,CALL [JRSTOK];(7) XPCW
610: SKP IO LEGAL,CALL [JRSTOK] ;(10) JRST 10, dismiss only
611: J/UUO ;(11)
612: SKP IO LEGAL,CALL [JRSTOK] ;(12) JEN
613: J/UUO ;(13)
614: AR_0.C,ARX_PC+1,J/XSFM ;(14) XSFM
615: LOAD AR,J/XJRST ;(15) XJRST
616: J/UUO ;(16)
617: J/UUO ;(17)
;
; JRSTOK will either drop out to UUO or return 20.
; GETNXT starts reading the next word and returns 40.
;
622: BR/AR,EA MOD DISP,J/JRSNDX ;JRSTF. Is it indexed?
;
624: HALT,J/CHALT ;HALT. Stop and loop
;
645: RSTR FLAGS_AR,ARX_AR SWAP, ;XJRSTF/XJEN. Restore flags, get
AR_MEM,SKP SC0,J/XJSPLT ; address, and dismiss if XJEN
;
627: BRX/ARX,AR_ARX ANDC ADMSK, ;XPCW. Get flags
ARX/AD,J/XPCW
;
630: DISMISS,VMA_AR,FETCH,J/NOP ;JRST 10. Just dismiss and jump
;
632: DISMISS,J/JRSTF ;JEN. Dismiss, then restore flags
;
; The more complex forms of JRST end up here. Most of these were
; substantially rewritten. [414]
;
=1110
JRSNDX: AR_ARX,J/RFLAGS ;JRSTF/JEN, no index. Flags in mem
AR_XR ;Indexed. Flags in AC
RFLAGS: RSTR FLAGS_AR,AR_BR,J/ARJMP ;[436] Restore flags; avoid race
;
=0
XJSPLT: SKP USER,J/LDPCS ;XJRSTF, no dismiss. Enter user?
DISMISS,SKP USER ;XJEN. Dismiss interrupt. User mode?
=0
LDPCS: GET ECL EBUS,J/PCSLOD ;No. Get EBUS and load PCS
ARJMP: VMA_AR,FETCH,J/NOP ;Yes. We're done
;
PCSLOD: LD PCS ;Do the load (from ARX)
COND/EBUS CTL,EBUS CTL/2,J/ARJMP;Release ECL EBUS and go
;
=0
XPCW: BR/AR,AR_0S,SKP USER, ;XPCW. Save flags and fetch previous
CALL [PRVSEC] ; section if not user mode
ARL_BRL,ARR_ARR,STORE ;Store flags word
FIN STORE,AR_ARX COMP AND BRX, ;Store PC word
VMA_VMA+1,STORE
=0***** FIN STORE,VMA_VMA+1,LOAD AR, ;Fetch new flags
CALL [GETNXT] ; and PC
RSTR FLAGS_AR,AR_MEM,J/ARJMP ;Restore flags, then jump
;
=0
XSFM: ARX_ARX ANDC ADMSK,SKP USER, ;Isolate flags and previous
CALL [PRVSEC] ; section if not user mode
ARL_ARXL,ARR_ARR,STORE,J/STMEM ;Store flags and exit
;
XJRST: AR_MEM,SET ACCOUNT EN,J/ARJMP ;XJRST. Get jump address and go
;
; JRSTOK--Subroutine to check whether a JRST X, is legal. Enter
; skipping legal. This exits to UUO if not, and returns 20
; otherwise.
;
=0
JRSTOK: J/UUO ;No go
RETURN20 ;Looks OK
;
; GETNXT--Subroutine to await a load and then start loading
; the next word in sequence. Return 40.
;
GETNXT: FIN LOAD,VMA_VMA+1,LOAD AR,RETURN [40];Await, then load
;
; PRVSEC--Subroutine to load the previous section and then
; swap it into the right half of AR. This is paired with
; ARSWAP (below). Return 1.
;
=0
PRVSEC: AR12-17_PREV SEC ;Load PCS
;
; [334] Subroutine to swap AR halves. Used in a couple of places.
;
ARSWAP: AR_AR SWAP,RETURN1 ;[334] Rearrange things
.TOC "HALT LOOP"
;HERE WHILE PROCESSOR IS "HALTED"
CHALT: AR_0S,CLR SC,CLR FE,SET HALTED, ;KERNEL OR CONSOLE HALT
VMA/PC,PC_VMA ; IF JRST 4, COPY EA TO PC
.IF/PAGCNT ;[327] PFH, DATAO PAG bit 2 counts
TRX2_AR ;[327] Zero count registers
TRX3_AR
.ENDIF/PAGCNT ;[327]
;
; The halt loop must be an odd number of ticks to allow diagnostics
; to synchronize EBOX with E and SBUS clock phases.
;
=0
HALT1: SKP -START,TIME/3T, ;CHECK FOR CONTINUE BUTTON
FE_AR0-8,ARX_AR,J/HALT2 ;PICK UP OPCODE IN CASE XCT
TAKE INTRPT ;HERE IF EXAMINE/DEPOSIT UP
=0
HALT2: GEN FE-1,BYTE DISP,CONTINUE,J/UNHALT ;INSTR FROM SWITCHES?
SKP INTRPT,TIME/2T,J/HALT1 ;Still halted
=110
UNHALT: SET CONS XCT,CLR FE,J/UXCT ;XCT ONE FROM "SWITCHES"
SKP AR EQ,J/START ;NOT AN INSTR. START, OR CONT?
.TOC "AC DECODE JUMPS -- JFCL"
.DCODE
255: I, TNN, J/JFCL ;JFCL--must be at JRST+100
.UCODE
;
; JFCL--Often a slow noop.
;
700: ;JFCL MUST BE AT JRST+100
JFCL: ARX_BRX,SC_#,#/13.,SKP AC EQ 0 ;[440] Grab AC field. Is it 0?
=00 AR_SHIFT,ARX_0S, ;No. MOVE AC TO AR32-35
SC_#,#/32.,CALL,J/SHIFT ;SHIFTER WILL MOVE TO 0-3
I FETCH,J/NOP ;[440] Yes. Speed up noop
BR/AR,AR_PC,JFCL T ;[440] GET PC FLAGS INTO AR
= TEST AR.BR,JFCL FETCH ;JUMP IF TEST SATISFIED
AR_AR*BR,AD/ANDCB ;CLEAR TESTED FLAGS IN AR
JFCL S,J/FINI ;SET PC FROM THEM
.TOC "MAP"
.DCODE
257: I, AC, J/MAP ;MAP--256 is XCT
.UCODE
1311: ;Must be near XCT
MAP: MAP,BR/AR ;MAP E, GO READ BACK EBRG
= SR_MAP ;With KL PAGING, MAP CAN PAGE FAIL
=0
RDEBRG: AR_0S,SKP IO LEGAL,MB WAIT, ;FINISH READ REG FUNC
CALL,J/GETEEB ;AND GET EBUS
AR_EBUS REG ;READ DATA
REL ECL EBUS,B WRITE,J/ST6 ;GIVE IT TO USER
;
; MAP never generates a hard page fail. If the MAP microorder
; faults, CLEAN returns here with
;
; AR_SV.PFW,SKP IO LEGAL ;Return PFW in AC
=0
MAP2: SR_0,J/UUO ;NO MAPS IN USER MODE
SKP INTRPT ;DO NOT BUM THIS CODE OUT
=0 I FETCH,J/STORAC ;MAP must do nothing interesting if
SET ACCOUNT EN,J/TAKINT ; an interrupt is pending
.TOC "STACK INSTRUCTIONS -- PUSHJ, PUSH, POP, POPJ"
.DCODE
260: EA, J/PUSHJ ;PUSHJ
R, B/0, J/PUSH ;PUSH
EA, B/0, J/POP ;POP
I, J/POPJ ;POPJ
.UCODE
;PUSHJ
; ENTER WITH E IN AR
;PUSH
; ENTER WITH (E) IN AR
=0****00***0
PUSH: ARX_AC0+1,PUSH,SKP CRY0,J/STMAC ;BUMP AC ACCORDING TO FORMAT
; AND SECTION NUMBER
PUSHJ: BR/AR,AR_PC+1,SKP PC SEC0 ;GET PC WITH FLAGS
=
=0 AR_AR AND ADMSK ;STRIP OFF FLAGS IF NOT SEC0
ARX_AC0+1,PUSH,SKP CRY0,J/JSTAC ;UPDATE STACK POINTER, STORE
=00
JRA1: VMA_AR,LOAD ARX,CALL,J/XFERW ;GET SAVED AC
=10
JSTAC: FIN STORE,VMA_BR,FETCH, ;STORE PC, JUMP ADDR TO VMA
AR_ARX,J/STORAC ;PREPARE TO STORE AC VALUE
TRAP2,MEM_AR,J/JSTAC ;CAUSE PDL OVRFLO
=0
STMAC: FIN STORE,I FETCH, ;STORE RESULT, GET NEXT INSTR
AR_ARX,B DISP,J/STSELF ;STORE AC IF B=0
MEM_AR,TRAP2, ;PDL OVFLO, CAUSE TRAP
AR_ARX,J/IFSTAC ;UPDATE AC BEFORE TRAPPING
;POP, POPJ
;ENTER WITH E IN AR
=0****00***0
POP: BR/AR,AR_AC0,POP AR,J/POP2 ;GET FROM STACK
POPJ: AR_AC0,POP AR-ARX ;GET STACK TO AR AND ARX
= AR_AR-1,TIME/3T,AC0, ;BACK OFF POINTER
STACK UPDATE,SKP CRY0 ; UNDERFLOW?
=0 MQ_AR,AR_MEM,ARX_MEM,TIME/3T, ;[413] Yes. AC to MQ, PC to AR and
TRAP2,J/POPJT ;[414] ARX, set trap
MQ_AR,AR_MEM,ARL_0.S,ARX_MEM, ;[413] AC TO BR, HALFWORD PC TO AR
TIME/3T,SKP PC SEC0 ;FULL PC TO ARX. Extended form?
=0
POPJ2: VMA_ARX,FETCH,ARX/MQ, ;[413] YES. LOAD ENTIRE ADDR
SC_#,#/36.,J/SHFLOD
VMA_AR,FETCH,ARX/MQ,SC_#,#/36., ;[413] NO, LOAD HALFWORD ADDRESS
J/SHFLOD
;
; POPJ gets stack underflow. Unfortunately, we can't clear ARL and
; set TRAP2 at the same time (to say nothing of testing PC SEC0).
;
POPJT: ARL_0.S,ARR_ARR, ;[414] Halfword PC to AR. Test for
SKP PC SEC0,J/POPJ2 ; extended form
;
=0*
POP2: ARX_AR-1,AC0,STACK UPDATE, ;BACK UP POINTER
SKP CRY0,CALL [POPTRP] ; and test for trap [413]
GEN BR,WRITE (E),J/STMAC ;STORE RESULT & AC
;
; Subroutine to test for POP trap and wait for memory. Return 2.
;
=0
POPTRP: AR_MEM,TRAP2,RETURN [2] ;POP stack underflowed.
;
; A one line subroutine to wait for a memory fetch (either AR
; or ARX) and return. Used by all sorts of things. Must adjoin
; POPTRP.
;
XFERW: AR_MEM,ARX_MEM,TIME/3T,RETURN2 ;Cross reference both macros [313]
.TOC "SUBROUTINE CALL/RETURN -- JSR, JSP, JSA, JRA"
.DCODE
264: EA, J/JSR ;JSR
EA, J/JSP ;JSP
I, J/JSA ;JSA
I, J/JRA ;JRA
.UCODE
=0****00***0
JSP: AR_PC+1,FETCH,SKP PC SEC0,J/JSP1
JSR: AR_PC+1,SKP PC SEC0
=
=0 AR_AR AND ADMSK,STORE,J/JSR1
STORE ;IN SECT 0, SAVE FLAGS, TOO
JSR1: FIN STORE,VMA_VMA+1,FETCH,J/NOP
=0
JSP1: AR_AR AND ADMSK,J/STAC ;NON-ZERO SEC, NO FLAGS
AC0_AR,J/FINI
=0****00***0
JSA: ARX_AR SWAP,AR_AC0,STORE,J/JSA1 ;SAVE E IN ARX LEFT, GET AC
JRA: AR12-17_PC SEC ;[235] put section in jump address.
= BR/AR,AR_AC0 ;[235][414] Grab AC, keep jump addr
ARR_ARL,ARL_BRL,J/JRA1 ;[235][414] Generate memory address
JSA1: FIN STORE,VMA_VMA+1,FETCH ;JUMP TO E+1
ARR_PC+1,ARL_ARXL,J/STAC ;PC+1,,E GOES TO AC
.TOC "UUO'S"
;LUUO'S TRAP TO CURRENT CONTEXT
; EXTENDED INSTRUCTION SET IS "HIDDEN" BENEATH LUUO OPCODES
; The general format is
;
; EA, Bfield, J/EXTEND op code - 1000
;
; so that a jump to LUUO can be put as the direct DRAM object
; and the EXTEND dispatch can ship it off to the appropriate
; extended op code processor. All of the legal EXTEND op codes
; are assembled adjacent to their handlers.
;
; WARNING: use extreme caution if E1 for MOVSRJ or CMPSE should
; ever be used for anything, as they are sign smeared if they are
; > 377777 (they fall in with MOVSO and friends at EXT2). [301]
; Use similar caution if new EXTEND codes are created which
; must have the DCODE B field be 1 or 3.
;
.DCODE
000: EA, J/UUO
.IF/EXTEXP
020: EA, J/BLUUO ;XBLT LUUO must adjoin GSNGL
.IFNOT/GFTCNV
023: EA, J/BLUUO ;G floating converts
EA, J/BLUUO ;decommited due to
EA, J/BLUUO ;lack of space
EA, J/BLUUO
.ENDIF/GFTCNV
.IFNOT/EXTEXP
020: EA, J/LUUO ;XBLT no longer dispatched
EA, J/LUUO
EA, J/LUUO
EA, J/LUUO
024: EA, J/LUUO
EA, J/LUUO
EA, J/LUUO
EA, J/LUUO
030: EA, J/LUUO
EA, J/LUUO
.ENDIF/EXTEXP
032: EA, J/LUUO ;These are reserved to Cobol.
EA, J/LUUO
EA, J/LUUO
EA, J/LUUO
EA, J/LUUO
EA, J/LUUO
;MONITOR UUO'S -- TRAP TO EXEC
040: EA, J/MUUO ;CALL
EA, J/MUUO ;INIT
EA, J/MUUO
EA, J/MUUO
EA, J/MUUO
EA, J/MUUO
EA, J/MUUO
EA, J/MUUO ;CALLI
EA, J/MUUO ;OPEN
EA, J/MUUO ;TTCALL
;
; 052 and 053 are now PMOVE and PMOVEM.
;
054: EA, J/MUUO
EA, J/MUUO ;RENAME
EA, J/MUUO ;IN
EA, J/MUUO ;OUT
EA, J/MUUO ;SETSTS
EA, J/MUUO ;STATO
EA, J/MUUO ;GETSTS
EA, J/MUUO ;STATZ
EA, J/MUUO ;INBUF
EA, J/MUUO ;OUTBUF
EA, J/MUUO ;INPUT
EA, J/MUUO ;OUTPUT
EA, J/MUUO ;CLOSE
EA, J/MUUO ;RELEAS
EA, J/MUUO ;MTAPE
EA, J/MUUO ;UGETF
EA, J/MUUO ;USETI
EA, J/MUUO ;USETO
EA, J/MUUO ;LOOKUP
EA, J/MUUO ;ENTER
;EXPANSION OPCODES
100: EA, J/UUO ;UJEN
EA, J/UUO
247: EA, J/UUO ;[430] Adjoins LSHC
.IFNOT/EXTEXP
102: EA, J/UUO
EA, J/UUO
106: EA, J/UUO
EA, J/UUO
.ENDIF/EXTEXP
.UCODE
;HERE FOR UNDEFINED OPS (UUO'S) AND ILLEGAL INSTRUCTIONS
;E IS IN AR, OPCODE AND AC IN BRX
;HERE ON LUUO'S
; E IN AR, INSTR IN BRX
;
; All LUUOs which have corresponding EXTEND op codes must dispatch
; to their own first word. In all cases, it is the same as LUUO.
;
.IF/EXTEXP ;[337]
1116:
.IF/GFTCNV ;[427]
BLUUO: ;[427] Define this for XBLT
.ENDIF/GFTCNV ;[427]
L-GTPI: ARX_BRX,SKP PC SEC0,J/LUUO1 ;GSNGL
1114:
L-SFTE: ARX_BRX,SKP PC SEC0,J/LUUO1 ;GDBLE
.IF/GFTCNV
1117:
L-GTDI: ARX_BRX,SKP PC SEC0,J/LUUO1 ;GDFIX
1106:
L-GTSI: ARX_BRX,SKP PC SEC0,J/LUUO1 ;GFIX
1107:
L-GTDR: ARX_BRX,SKP PC SEC0,J/LUUO1 ;GDFIXR
1110:
L-GTSR: ARX_BRX,SKP PC SEC0,J/LUUO1 ;GFIXR
.IFNOT/GFTCNV
1110:
BLUUO: ARX_BRX,SKP PC SEC0,J/LUUO1 ;Conditioned out EXTEND ops
3110: J/MUUO ;Force EXTEND to UUO
.ENDIF/GFTCNV
1111:
L-DITE: ARX_BRX,SKP PC SEC0,J/LUUO1 ;DGFLTR
1112:
L-SITE: ARX_BRX,SKP PC SEC0,J/LUUO1 ;DGLTR
1113:
L-EFSC: ARX_BRX,SKP PC SEC0,J/LUUO1 ;GFSC
.IFNOT/EXTEXP
1110:
BLUUO: ARX_BRX,SKP PC SEC0,J/LUUO1 ;Conditioned out EXTEND ops
3110: J/MUUO ;Force EXTEND to UUO
.ENDIF/EXTEXP
1006:
L-EDIT: ARX_BRX,SKP PC SEC0,J/LUUO1 ;EDIT
1010:
L-DBIN: ARX_BRX,SKP PC SEC0,J/LUUO1 ;DBIN AT 2010
1011:
L-BDEC: ARX_BRX,SKP PC SEC0,J/LUUO1 ;BDEC AT 2011
1012:
L-MVS: ARX_BRX,SKP PC SEC0,J/LUUO1 ;MOVE STRING AT 2012
1005:
L-CMS: ;STRING COMPARE
LUUO: ARX_BRX,SKP PC SEC0 ;WHICH KIND OF UUO?
=0***0
LUUO1: CLR P,SKP -LOCAL AC ADDR, ;[414] Extended. Generate clean
CALL [UUOCOM] ; section number
BR/AR,AR_ARX ANDC ADMSK, ;COMPATiBLE. ADDR TO BR
SKP INTRPT,J/LUUO2 ; DO IT THE OLD WAY
VMA_#,#/420 ;PT LOC FOR LUUO BLOCK POINTER
=
=00 LOAD ARX,PT REF,CALL,J/XFERW ;GET LUUO BLOCK ADDRESS
=10 VMA_ARX,STORE,CALL,J/UUOC2 ;STORE UUO OPCODE AND FLAGS
FIN STORE,VMA_VMA+1,LOAD AR, ;NOW GET A NEW PC
J/XJRST ; [414]
;HERE FOR COMPATIBLE UUO
=0
LUUO2: AR_AR*BR,AD/OR,VMA_#,#/40, ;SAVE OPCODE AND EA
STORE,J/LUUO3 ;THEN GET INSTR FROM 41
TAKE INTRPT ;ONE MOMENT, PLEASE
LUUO3: FIN STORE,VMA_VMA+1,LOAD ARX,
J/XCTW
;HERE ON MUUO'S
; E IN AR, OP AND AC IN BRX
1002: ;Fixed for EXTEND, other ops
UUO: ;A PEDANTIC DISTINCTION...
MUUO: ARX_BRX,CLR P,SKP -LOCAL AC ADDR,;[414] Get clean section number
CALL [UUOCOM] ; and pull together pieces of UUO
1022: LOAD ARX,UPT REF ;GET NEW PC
ARX_MEM,VMA_#,#/424 ;LOC'N OF MUUO DATA BLOCK
=0 BRX/ARX,STORE,UPT REF, ;STORE OPCODE, FLAGS
CALL,J/UUOC2 ;NOW RETURN TO COMMON CODE
MEM_AR,AR_PC,SC_#,#/4 ;READY TO SETUP NEW FLAGS
=00 VMA_VMA+1,SC_#,#/60, ;SET UP FOR CONTEXT WORD
SH DISP,AR_0S, ;TEST USER AND PUBLIC FLAGS
CALL,J/MUUOF ;SET NEW PREV FLAGS, GET EBUS
DATAI PAG(L),ARX_1B17-1, ;GO COLLECT DATAI PAG INFO
CALL,J/PCTXT
=11 LD PREV CTXT ;PCS FROM PC, CWSX FROM SXCT
AR_SHIFT,ARL_BRL.S, ;COMBINE UBR WITH AC BLKS, CWSX
STORE, ; STORE THAT AT 426 (XADDR =427)
COND/EBUS CTL,EBUS CTL/2; & RELEASE ECL EBUS
MEM_AR,AR_BRX,SR_0 ;NOW GET NEW PC
SETPC: VMA_AR AND ADMSK,FETCH,J/NOP
=0 ;[414]
UUOCOM: ARL_1.M ;FORCE AC ADDRESS
MQ_AR,AR_ARX ANDC ADMSK ;SAVE ADDR IN MQ. GET OPCODE
BR/AR,AR_0.S,SKP USER ;SAVE OPCODE IN BR
=0 AR12-17_PREV SEC ;GET PCS
AR_AR*BR,AD/OR,VMA_430+MODE ;[414] OPCODE+PCS, UUO new PC loc
ARX_AR SWAP,AR_PC FLAGS ;GET FLAGS FROM PC
ARL_ARL,ARR_ARX,RETURN20 ;[414] FLAGS AND OPCODE COMBINED
UUOC2: MEM_AR,ARX_PC+1 ;FINISH STORE
AR_ARX AND ADMSK, ;PC+1 ADDRESS TO AR
VMA_VMA+1,STORE,ARX/MQ ;PUT PC AWAY, GET EFFECTIVE ADDR
FIN STORE,AR_ARX,
VMA_VMA+1,STORE,RETURN1 ;PUT EA AWAY.
=1010 ;HERE TO SETUP NEW FLAGS
MUUOF: SET FLAGS_AR,J/GTEEB1 ;GO GET ECL EBUS
AR0-8_#,#/400,J/MUUOF ;PREV CTXT SUPERVISOR
AR0-8_#,#/004,J/MUUOF ; USER/CONCEALED
AR0-8_#,#/404,J/MUUOF ; USER/PUBLIC
.TOC "JSYS, ADJSP, XCT, PXCT"
.DCODE
104: EA, J/UUO ;JSYS
I, J/ADJSP ;ADJSP [431]
.UCODE
;
; ADJSP has been completely rewritten to start the I FETCH
; quicker in all cases. [431]
;
1000: ;Must adjoin JSYS (UUO)
ADJSP: ARL_ARR,ARR_ARR,ARX_1,TIME/2T ;Gen adjustment for short stack
AC0,STACK UPDATE,GEN ARX-1, ;Short stack enables CRY18; thus
SKP CRY0,I FETCH ; skip on long pointer
=0 AR_AR+FM[AC0],INH CRY18, ;Short pointer. Adjust both halves
SKP AR0,J/ADJPDL ; and set for proper overflow test
ARL_SIGN,ARR_ARR ;Long pointer. Sign extend E
AR_AR+FM[AC0],J/STAC ;Adjust and store
;
=0
ADJPDL: GEN AR*AC0,AD/ANDCA,SKP AD0, ;Positive adjustment. Test for
J/ADJTRP ; - to + change
GEN AR*AC0,AD/ANDCB,SKP AD0 ;Negative. Look for + to - change
=0
ADJTRP: AC0_AR,NXT INSTR ;No overflow. All done
FETCH WAIT,TRAP2,J/STAC ;Overflow. Set trap; don't lose PF
.DCODE
256: R, J/XCT ;XCT--257 is MAP
.UCODE
1310: ;Must be near MAP
XCT: SKP INTRPT ;CHECK FOR XCT . LOOP
=0 SKP USER,J/PXCT ;HERE ON XCT, NO INTERRUPT
TAKE INTRPT ;GET OUT OF LONG XCT CHAIN
=0
PXCT: SET PXCT ;SETUP PXCT CONTROLS FROM 9-12
UXCT: ARX_AR (AD),LOAD IR,#/0,J/XCTGO ;COPY INSTR TO ARX, IR