Trailing-Edge
-
PDP-10 Archives
-
ksu2_130
-
ks10.mcr
Click ks10.mcr to
see without markup as text/plain
There are 3 other files named ks10.mcr in the archive. Click here to see a list.
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 1
; Table of Contents
; 1 KS10.MIC[7,3] 14:54 7-JAN-1986
; 57 REVISION HISTORY
; 184 HOW TO READ THE MICROCODE
; 389 CONDITIONAL ASSEMBLY DEFINITIONS
; 435 2901 REGISTER USAGE
; 471 MICROCODE FIELDS -- LISTING FORMAT
; 519 MICROCODE FIELDS -- DATAPATH CHIP
; 671 MICROCODE FIELDS -- RAM FILE ADDRESS AND D-BUS
; 705 MICROCODE FIELDS -- PARITY GENERATION & HALF WORD CONTROL
; 728 MICROCODE FIELDS -- SPEC
; 831 MICROCODE FIELDS -- DISPATCH
; 875 MICROCODE FIELDS -- SKIP
; 926 MICROCODE FIELDS -- TIME CONTROL
; 946 MICROCODE FIELDS -- RANDOM CONTROL BITS
; 968 MICROCODE FIELDS -- NUMBER FIELD
; 1312 DISPATCH ROM DEFINITIONS
; 1358 HOW TO READ MACROS
; 1517 MACROS -- DATA PATH CHIP -- GENERAL
; 1667 MACROS -- DATA PATH CHIP -- Q
; 1702 MACROS -- DATA PATH CHIP -- MISC.
; 1723 MACROS -- STORE IN AC
; 1755 MACROS -- MICROCODE WORK SPACE
; 1782 MACROS -- MEMORY CONTROL
; 1832 MACROS -- VMA
; 1849 MACROS -- TIME CONTROL
; 1862 MACROS -- SCAD, SC, FE LOGIC
; 1945 MACROS -- DATA PATH FIELD CONTROL
; 1961 MACROS -- SHIFT PATH CONTROL
; 1974 MACROS -- SPECIAL FUNCTIONS
; 2005 MACROS -- PC FLAGS
; 2034 MACROS -- PAGE FAIL FLAGS
; 2042 MACROS -- SINGLE SKIPS
; 2067 MACROS -- SPECIAL DISPATCH MACROS
; 2101 DISPATCH ROM MACROS
; 2142 SIMPLE.MIC[7,3] 16:49 11-NOV-1985
; 2144 POWER UP SEQUENCE
; 2226 THE INSTRUCTION LOOP -- START NEXT INSTRUCTION
; 2350 THE INSTRUCTION LOOP -- FETCH ARGUMENTS
; 2462 THE INSTRUCTION LOOP -- STORE ANSWERS
; 2546 MOVE GROUP
; 2583 EXCH
; 2598 HALFWORD GROUP
; 2765 DMOVE, DMOVN, DMOVEM, DMOVNM
; 2796 BOOLEAN GROUP
; 2951 ROTATES AND LOGICAL SHIFTS -- ROT, LSH, JFFO
; 3047 ROTATES AND LOGICAL SHIFTS -- LSHC
; 3082 ROTATES AND LOGICAL SHIFTS -- ASHC
; 3121 ROTATES AND LOGICAL SHIFTS -- ROTC
; 3153 TEST GROUP
; 3305 COMPARE -- CAI, CAM
; 3374 ARITHMETIC SKIPS -- AOS, SOS, SKIP
; 3424 CONDITIONAL JUMPS -- JUMP, AOJ, SOJ, AOBJ
; 3515 AC DECODE JUMPS -- JRST, JFCL
; 3605 EXTENDED ADDRESSING INSTRUCTIONS
; 3646 XCT
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 2
; Table of Contents
; 3668 STACK INSTRUCTIONS -- PUSHJ, PUSH, POP, POPJ
; 3765 STACK INSTRUCTIONS -- ADJSP
; 3798 SUBROUTINE CALL/RETURN -- JSR, JSP, JSA, JRA
; 3853 ILLEGAL INSTRUCTIONS AND UUO'S
; 4052 ARITHMETIC -- ADD, SUB
; 4081 ARITHMETIC -- DADD, DSUB
; 4114 ARITHMETIC -- MUL, IMUL
; 4165 ARITHMETIC -- DMUL
; 4306 ARITHMETIC -- DIV, IDIV
; 4383 ARITHMETIC -- DDIV
; 4504 ARITHMETIC -- DIVIDE SUBROUTINE
; 4569 ARITHMETIC -- DOUBLE DIVIDE SUBROUTINE
; 4609 ARITHMETIC -- SUBROUTINES FOR ARITHMETIC
; 4655 BYTE GROUP -- IBP, ILDB, LDB, IDPB, DPB
; 4732 BYTE GROUP -- INCREMENT BYTE POINTER SUBROUTINE
; 4745 BYTE GROUP -- BYTE EFFECTIVE ADDRESS EVALUATOR
; 4779 BYTE GROUP -- LOAD BYTE SUBROUTINE
; 4832 BYTE GROUP -- DEPOSIT BYTE IN MEMORY
; 4920 BYTE GROUP -- ADJUST BYTE POINTER
; 5079 BLT
; 5261 FLT.MIC[7,3] 01:46 20-MAR-1981
; 5262 FLOATING POINT -- FAD, FSB
; 5307 FLAOTING POINT -- FMP
; 5336 FLOATING POINT -- FDV
; 5386 FLOATING POINT -- FLTR, FSC
; 5421 FLOATING POINT -- FIX AND FIXR
; 5458 FLOATING POINT -- SINGLE PRECISION NORMALIZE
; 5525 FLOATING POINT -- ROUND ANSWER
; 5536 FLOATING POINT -- DFAD, DFSB
; 5625 FLOATING POINT -- DFMP
; 5686 FLOATING POINT -- DFDV
; 5740 FLOATING POINT -- DOUBLE PRECISION NORMALIZE
; 5850 EXTEND.MIC[7,3] 11:35 26-JULY-1984
; 5851 EXTEND -- DISPATCH ROM ENTRIES
; 5906 EXTEND -- INSTRUCTION SET DECODING
; 5948 EXTEND -- MOVE STRING -- SETUP
; 5993 EXTEND -- MOVE STRING -- OFFSET/TRANSLATE
; 6024 EXTEND -- MOVE STRING -- MOVSRJ
; 6072 EXTEND -- MOVE STRING -- SIMPLE MOVE LOOP
; 6096 EXTEND -- COMPARE STRING
; 6157 EXTEND -- DECIMAL TO BINARY CONVERSION
; 6289 EXTEND -- BINARY TO DECIMAL CONVERSION
; 6447 EXTEND -- EDIT -- MAIN LOOP
; 6501 EXTEND -- EDIT -- DECODE OPERATE GROUP
; 6520 EXTEND -- EDIT -- STOP EDIT
; 6535 EXTEND -- EDIT -- START SIGNIFICANCE
; 6542 EXTEND -- EDIT -- EXCHANGE MARK AND DESTINATION
; 6553 EXTEND -- EDIT -- PROCESS SOURCE BYTE
; 6616 EXTEND -- EDIT -- MESSAGE BYTE
; 6639 EXTEND -- EDIT -- SKIP
; 6653 EXTEND -- EDIT -- ADVANCE PATTERN POINTER
; 6686 EXTEND SUBROUTINES -- FILL OUT DESTINATION
; 6710 EXTEND SUBROUTINES -- GET MODIFIED SOURCE BYTE
; 6747 EXTEND SUBROUTINES -- TRANSLATE
; 6833 EXTEND SUBROUTINES -- GET UNMODIFIED SOURCE BYTE
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 3
; Table of Contents
; 6862 EXTEND SUBROUTINES -- STORE BYTE IN DESTINATION STRING
; 6883 EXTEND SUBROUTINES -- UPDATE DEST STRING POINTERS
; 6927 EXTEND -- PAGE FAIL CLEANUP
; 6966 INOUT.MIC[7,3] 13:32 7-JAN-1986
; 6967 TRAPS
; 6998 IO -- INTERNAL DEVICES
; 7109 IO -- INTERNAL DEVICES -- EBR & UBR
; 7235 IO -- INTERNAL DEVICES -- KL PAGING REGISTERS
; 7277 IO -- INTERNAL DEVICES -- TIMER CONTROL
; 7308 IO -- INTERNAL DEVICES -- WRTIME & RDTIME
; 7347 IO -- INTERNAL DEVICES -- WRINT & RDINT
; 7361 IO -- INTERNAL DEVICES -- RDPI & WRPI
; 7401 IO -- INTERNAL DEVICES -- SUBROUTINES
; 7542 PRIORITY INTERRUPTS -- DISMISS SUBROUTINE
; 7557 EXTERNAL IO INSTRUCTIONS
; 7745 SMALL SUBROUTINES
; 7769 UNDEFINED IO INSTRUCTIONS
; 7850 UMOVE AND UMOVEM
; 7905 WRITE HALT STATUS BLOCK
; 7997 PAGEF.MIC[7,3] 12:15 10-APR-1985
; 7999 PAGE FAIL REFIL LOGIC
; Cross Reference Index
; DCODE Location / Line Number Index
; UCODE Location / Line Number Index
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 4
; KS10.MIC[7,3] 14:54 7-JAN-1986 KS10.MIC[7,3] 14:54 7-JAN-1986
; 1 .NOBIN
; 2 .TITLE "KS10 MICROCODE V130, 7-JAN-86"
; 3
; 4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 7 ;;; ;;;
; 8 ;;; ;;;
; 9 ;;; COPYRIGHT (C) 1976,1977,1978,1979,1980,1981,1982, ;;;
; 10 ;;; 1984,1985,1986 ;;;
; 11 ;;; DIGITAL EQUIPMENT CORP., MAYNARD, MASS. ;;;
; 12 ;;; ;;;
; 13 ;;; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ;;;
; 14 ;;; ONLY ON A SINGLE COMPUTER SYSTEM AND MAY BE COPIED ;;;
; 15 ;;; ONLY WITH THE INCLUSION OF THE ABOVE COPYRIGHT ;;;
; 16 ;;; NOTICE. THIS SOFTWARE, OR ANY OTHER COPIES THEREOF, ;;;
; 17 ;;; MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ;;;
; 18 ;;; ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND ;;;
; 19 ;;; TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE TO ;;;
; 20 ;;; AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES ;;;
; 21 ;;; REMAIN IN DEC. ;;;
; 22 ;;; ;;;
; 23 ;;; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO ;;;
; 24 ;;; CHANGE WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS ;;;
; 25 ;;; A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. ;;;
; 26 ;;; ;;;
; 27 ;;; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR ;;;
; 28 ;;; RELIABILITY OF ITS SOFTWARE IN EQUIPMENT WHICH IS ;;;
; 29 ;;; NOT SUPPLIED BY DEC. ;;;
; 30 ;;; ;;;
; 31 ;;; DESIGNED AND WRITTEN BY: ;;;
; 32 ;;; DONALD A. LEWINE ;;;
; 33 ;;; DIGITAL EQUIPMENT CORP. ;;;
; 34 ;;; MARLBORO, MASS. ;;;
; 35 ;;; MR1-2/E47 X6430 ;;;
; 36 ;;; ;;;
; 37 ;;; MAINTAINED AND ENHANCED BY: ;;;
; 38 ;;; DONALD D. DOSSA ;;;
; 39 ;;; DIGITAL EQUIPMENT CORP. ;;;
; 40 ;;; MARLBORO, MASS. ;;;
; 41 ;;; MR1-2/E18 DTN 231-4138 ;;;
; 42 ;;; ;;;
; 43 ;;; SEAN KEENAN ;;;
; 44 ;;; DIGITAL EQUIPMENT CORP. ;;;
; 45 ;;; MARLBORO, MASS. ;;;
; 46 ;;; MR1-2/E18 DTN 231-4463 ;;;
; 47 ;;; ;;;
; 48 ;;; TIMOTHE LITT ;;;
; 49 ;;; DIGITAL EQUIPMENT CORP. ;;;
; 50 ;;; MARLBORO, MASS. ;;;
; 51 ;;; IND-3/C9 262-8374 ;;;
; 52 ;;; ;;;
; 53 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 54 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 55 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 56
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 5
; KS10.MIC[7,3] 14:54 7-JAN-1986 REVISION HISTORY
; 57 .TOC "REVISION HISTORY"
; 58
; 59 ;REV WHY
; 60 ;1 START KS10 MICROCODE BASED ON SM10 MICROCODE VERSION 510
; 61 ;2 UPDATE TO KS10 VERSION 512
; 62 ;3 FIX SOME DEFAULTS
; 63 ;4 CHANGE HARDWARE TO MATCH ECO #215
; 64 ;5 START TO UPDATE IO MICROCODE
; 65 ;6 MORE WORK ON IO
; 66 ;7 MAKE INTERRUPT THE 8080 BE A PULSE.
; 67 ;10 ADD NEW RDIO AND WRIO
; 68 ;11 FIX PROBLEMS IN MUUO CODE & CORRECT T-FIELDS
; 69 ;12 FIX PROBLEMS IN DDIV
; 70 ;13 FIX UP PROBLEMS IN PI
; 71 ;14 TURN ON WRITE FOR FL-EXIT
; 72 ;15 FIX UP MAP INSTRUCTION
; 73 ;16 MORE WORK ON KI-STYLE MAP
; 74 ;17 INVERT HOLD RIGHT AND HOLD LEFT BITS
; 75 ;20 FIXUP WRIO & RDIO EFFECTIVE ADDRESS CALC.
; 76 ;21 FIX EDIT 15
; 77 ;22 HAVE LSH USE FAST SHIFT HARDWARE
; 78 ;23 FIX T-FIELD VALUES FOR PRODUCTION HARDWARE
; 79 ;24 REMOVE WRITE TEST FROM IO READS & WRITES
; 80 ;25 REWRITE MUL & MULI TO BE FASTER AND SMALLER. ALSO MAKE ADJBP
; 81 ; USE NEW MULSUB
; 82 ;26 MAKE BYTES USE FAST SHIFT ECO.
; 83 ;27 MAKE SURE VMA FETCH IS CORRECT
; 84 ;30 MORE OF 25 (FORGOT FMP)
; 85 ;31 FIX SOME PROBLEMS WITH TRAPS
; 86 ;32 SPEED UP EFFECTIVE ADDRESS CALCULATION
; 87 ;33 MORE OF 32
; 88 ;34 SPEED UP ASH & ROT
; 89 ;35 FIX UP RDTIM SO THAT TIME DOES NOT GO BACKWARDS
; 90 ;36 MORE OF 35
; 91 ;37 FIX UP PROBLEMS WITH INTERRUPTS AND DOUBLE F.P.
; 92 ;40 IMPROVE LISTING FORMAT
; 93 ;41 SPEEDUP KL-MODE PAGE REFILL
; 94 ;42 FIX UP DDIV
; 95 ;43 STILL MORE DDIV STUFF
; 96 ;44 CORRECT PROBLEMS IN D.P. PARITY STUFF
; 97 ;45 CORRECT THE BLT CLEAR-CORE CASE TO INTERRUPT CORRECTLY
; 98 ;46 MORE OF 45
; 99 ;47 DO NOT ALLOW SOFTWARE INTERRUPTS IF THE PI LEVEL IS NOT
; 100 ; ACTIVE.
; 101 ;50 MAKE FDV WORK THE SAME AS THE KL10
; 102 ;51 FIX INTERRUPT IN CVTBDX. MAKE ABORT WORK LIKE SPEC.
; 103 ;52 FIX BUG IN HALT LOOP
; 104 ;53 FIX IOEA TO WORK IF NO @ OR INDEXING
; 105 ;54 EDIT 47 BROKE JEN
; 106 ;55 FIX FLAGS IN MULTIPLY. ALSO CODE BUMS
; 107 ;56 MORE CODE BUMS
; 108 ;57 CORRECT OVERFLOW TRAPS WHICH DO MUUOS TO NOT STORE
; 109 ; THE TRAP FLAGS.
; 110
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 6
; KS10.MIC[7,3] 14:54 7-JAN-1986 REVISION HISTORY
; 111 ;60 CORRECT TRAPS SO THAT DSKEA RUNS RIGHT
; 112 ;61 MORE OF 60. NOTE: MICROCODE REQUIRES ECO #299!!
; 113 ;62 ONE MORE TRY AT EDIT 60.
; 114 ;63 CORRECT TOPS-10 STYLE PAGING SO THAT A WRITE VIOLATION SETS
; 115 ; BIT 2 IN THE PAGE FAIL WORD (ACCESS ALLOWED).
; 116 ;64 EDIT 63 BROKE HARD PAGE FAILS. (NXM, BAD DATA, AND IO NXM)
; 117 ;65 INTERRUPTS OUT OF MOVSRJ INSTRUCTIONS DO STRANGE THINGS.
; 118 ;66 IO NXM PAGE FAIL FOR MISSING UBA GIVES PC+1 IN PAGE FAIL BLOCK.
; 119 ;67 ON A BAD DATA ERROR, STORE THE BAD WORD IN AC BLOCK 7 WORD 0 AND
; 120 ; 1
; 121 ;70 FIX A BUG WHICH CAUSED INTERRUPTS OUT OF CVTBDT TO GENERATE A BAD
; 122 ; ANSWER.
; 123 ;71 CLEANUP SOME THINGS TO MAKE LIFE EASIER FOR FIELD SERVICE
; 124 ;72 LOOK FOR 1-MS TRAP ON @ PAGE POINTERS AND ABORT REFILL IF
; 125 ; SET.
; 126 ;73 CORRECT EDIT 72.
; 127 ;74 EDIT 67 GENERATES A DATA PATH PARITY ERROR BECAUSE OF THE BAD
; 128 ; DATA. CORRECT TO NOT CHECK PARITY.
; 129 ; ALSO CHANGE POP TO TIE UP BUS LESS.
; 130 ;75 EDIT 60 BROKE TRAPS. MISSING =0 AT TRAP:.
; 131 ;76 CORRECT BUG IN DFAD AND DFSB
; 132 ;77 FIX PROBLEM SEEN IN SOME (ALL BUT ENGINEERING?) MACHINES CAUSED
; 133 ; BY EDIT 76
; 134 ;100 CHANGE DFAD/DFSB TO HAVE 2 MORE GUARD BITS. THIS SHOULD PRODUCE
; 135 ; KL10 ANSWERS FOR ALL NORMALIZED INPUTS
; 136 ; ALSO FIX A BUG IN CVTBDX PAGE FAIL LOGIC.
; 137 ;101 DFDV OF 0.0 / -0.5 HANGS THE MACHINE
; 138 ;102 FIX CHOPPED FLOATING POINT INSTRUCTIONS
; 139 ;103 CORRECT DFDV ROUNDING BUG.
; 140 ;104 CORRECT PROBLEMS IN DFMP
; 141 ;105 RDTIME SOMETIMES GIVES WRONG ANSWER. CARRY BETWEEN
; 142 ; WORDS GETS LOST SOMETIME.
; 143 ;106 MOVEM (ALSO, SETZM, SETOM, ETC.) SOMETIMES DOES NOT GENERATE
; 144 ; A WRITE-TRAP IN 100% OF THE CASES THAT IT SHOULD.
; 145 ;107 PXCT 14, DOES NOT GET THE INDEX REGISTER IN THE PREVIOUS
; 146 ; CONTEXT ALL THE TIME.
; 147 ;110 FIX TYPO IN EDIT 103
; 148 ;111 63. BIT BYTES DO NOT WORK CORRECTLY. DSKDA FAILS BECAUSE OF THIS
; 149 ; PROBLEM.
; 150 ;******* VERSION 111 WENT OUT WITH SYSTEM REV 2 *******
; 151
; 152 ;112 FIX COMMENT IN TEST INSTRUCTIONS
; 153 ;113 CORRECT IOEA TO COMPUTE CORRECT ADDRESS IF JUST LOCAL INDEXING
; 154 ; IS USED.
; 155 ;114 CORRECT INTERRUPT BUG IN DMUL
; 156 ;115 CORRECT COMMENTS HALT STATUS BLOCK
; 157 ;116 CORRECT PROBLEM WHERE CST MODIFIED BIT GETS SET BY MISTAKE.
; 158 ;117 RDINT INSTRUCTION DOES NOT WORK AT ALL. IT STORES RANDOM TRASH
; 159 ; IN THE WRONG PLACE. NEED TO LOAD BR NOT AR.
; 160 ;120 FLOATING POINT OPERATIONS SOMETIMES GET THE WRONG RESULT WITH
; 161 ; INPUTS OF UNNORMALIZED ZEROS. THIS SHOULD NEVER HAPPEN WITH
; 162 ; FORTRAN OR ANY OTHER DEC LANGUAGE.
; 163 ;121 PREVENT KEEP-ALIVE CRASHES FROM OCCURRING BECAUSE THE MOVSRJ
; 164 ; INSTRUCTION CAN LOCK OUT THE 1MS TIMER INTERRUPTS FROM BEING
; 165 ; HANDLED. THIS CAUSES THE OPERATING SYSTEM TO LOSE TRACK OF THE
; 166 ; PASSAGE OF TIME.
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 6-1
; KS10.MIC[7,3] 14:54 7-JAN-1986 REVISION HISTORY
; 167 ;122 DFAD FOLLOWED BY A FSC OF -5 CAUSES THE FSC TO GET WRONG
; 168 ; ANSWER. HAD TO CLEAR FLAG WORD AT EXIT OF DFAD TO FIX PROBLEM
; 169 ;123 MORE CODE FOR EDIT 121. ADDED ANOTHER DISPATCH ADDRESS FOR
; 170 ; PAGE FAIL CODE AT PFD:.
; 171 ;124 ADD ASSEMBLY OPTIONS FOR NOCST AND INHIBIT CST UPDATE.
; 172 ; ADD BLTUB/BLTBU TO GET UBA STYLE BYTES SWAPPED TO/FROM ILDB FORM.
; 173 ; ADD ASSEMBLY OPTIONS FOR KI/KL PAGE. NEED THE SPACE FOR BLTUB/BU.
; 174 ;125 SUPPORT THE "MAJOR/MINOR VERSION IN 136" UCODE STANDARD.
; 175 ; FIX BAD CONSTRAINT FOR INHCST ASSEMBLIES (NOT CURRENTLY USED)
; 176 ;126 FIX NON-TRIVIAL CASES OF RDUBR,WRUBR, AND PROCESS CONTEXT WORD.
; 177 ;127 JSR IN A TRAP CYCLE STORES E+1 SOMETIMES. TRAP CYCLE WAS NOT BEING
; 178 ; CLEARED (BY NICOND) BEFORE STARTING THE NEXT MEMORY READ.
; 179 ;130 FIX UCODE HANG WITH STOPPPED CLOCKS ON WR (KL-PAGING REGISTER) IF
; 180 ; PAGING IS ON. IDEALLY, WE WOULD REMOVE WRITE TEST FROM THE DROM
; 181 ; FIELD, BUT IT'S TOO LATE TO ECO THE ROMS.
; 182 ; RESTRICTION: WRITE KLPAGE REGISTER LOCATION MUST BE WRITABLE.
; 183
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 7
; KS10.MIC[7,3] 14:54 7-JAN-1986 HOW TO READ THE MICROCODE
; 184 .TOC "HOW TO READ THE MICROCODE"
; 185
; 186 ;
; 187 ;
; 188 ; 1.0 FIELD DEFINITIONS
; 189 ;
; 190 ; THESE OCCUR AT THE BEGINNING OF THE LISTING, IN THE SOURCE FILE KS10.MIC
; 191 ; (CONTROL AND DISPATCH RAM DEFINITIONS). THEY HAVE THE FORM:
; 192 ;
; 193 ; SYMBOL/=<L:R>M,J
; 194 ;
; 195 ; THE PARAMETER (J) IS MEANINGFUL WHEN "D" IS SPECIFIED AS THE DEFAULT MECHANISM,
; 196 ; AND IN THAT CASE, GIVES THE DEFAULT VALUE OF THE FIELD IN OCTAL. WHEN "F" IS
; 197 ; SPECIFIED AS THE DEFAULT MECHANISM, (J) IS THE NAME OF A FIELD WHICH CONTAINS
; 198 ; THE DEFAULT VALUE FOR THIS FIELD.
; 199 ;
; 200 ; THE PARAMETER (L) GIVES THE BIT POSITION OF THE LEFTMOST BIT IN THE FIELD. THE
; 201 ; SAME METHOD IS USED AS FOR (R) BELOW.
; 202 ;
; 203 ; THE PARAMETER (R) GIVES THE FIELD POSITION IN DECIMAL AS THE BIT NUMBER OF THE
; 204 ; RIGHTMOST BIT OF THE FIELD. BITS ARE NUMBERED FROM 0 ON THE LEFT. NOTE THAT
; 205 ; THE POSITION OF BITS IN THE MICROWORD SHOWN IN THE LISTING BEARS NO RELATION TO
; 206 ; THE ORDERING OF BITS IN THE HARDWARE MICROWORD, WHERE FIELDS ARE OFTEN BROKEN UP
; 207 ; AND SCATTERED.
; 208 ;
; 209 ; THE PARAMETER (M) IS OPTIONAL, AND SELECTS A DEFAULT MECHANISM FOR THE FIELD.
; 210 ; THE LEGAL VALUES OF THIS PARAMETER ARE THE CHARACTERS "D", "F", "T", "P", OR
; 211 ; "+".
; 212 ;
; 213 ; "D" MEANS (J) IS THE DEFAULT VALUE OF THE FIELD IF NO EXPLICIT VALUE IS
; 214 ; SPECIFIED.
; 215 ;
; 216 ; "F" IS USED TO CAUSE THIS FIELD TO DEFAULT TO SOME OTHER FIELD.
; 217 ;
; 218 ; "T" IS USED ON THE TIME FIELD TO SPECIFY THAT THE VALUE OF THE FIELD
; 219 ; DEPENDS ON THE TIME PARAMETERS SELECTED FOR OTHER FIELDS. "T" IS NOT
; 220 ; USED IN THE KS10.
; 221 ;
; 222 ; "P" IS USED ON THE PARITY FIELD TO SPECIFY THAT THE VALUE OF THE FIELD
; 223 ; SHOULD DEFAULT SUCH THAT PARITY OF THE ENTIRE WORD IS ODD. "P" IS NOT
; 224 ; USED ON THE KS10.
; 225 ;
; 226 ; "+" IS USED ON THE JUMP ADDRESS FIELD TO SPECIFY THAT THE DEFAULT JUMP
; 227 ; ADDRESS IS THE ADDRESS OF THE NEXT INSTRUCTION ASSEMBLED (NOT, IN
; 228 ; GENERAL, THE CURRENT LOCATION +1).
; 229 ;
; 230 ; IN GENERAL, A FIELD CORRESPONDS TO THE SET OF BITS WHICH PROVIDE SELECT INPUTS
; 231 ; FOR MIXERS OR DECODERS, OR CONTROLS FOR ALU'S.
; 232 ;
; 233 ;
; 234
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 8
; KS10.MIC[7,3] 14:54 7-JAN-1986 HOW TO READ THE MICROCODE
; 235 ; 2.0 VALUE DEFINITIONS
; 236 ;
; 237 ; FOLLOWING A FIELD DEFINITION, SYMBOLS MAY BE CREATED IN THAT FIELD TO CORRESPOND
; 238 ; TO VALUES OF THE FIELD. THE FORM IS:
; 239 ;
; 240 ; SYMBOL=N
; 241 ;
; 242 ; "N" IS, IN OCTAL, THE VALUE OF SYMBOL WHEN USED IN THE FIELD.
; 243 ;
; 244 ;
; 245 ;
; 246 ; 3.0 LABEL DEFINITIONS
; 247 ;
; 248 ; A MICRO INSTRUCTION MAY BE LABELLED BY A SYMBOL FOLLOWED BY COLON PRECEDING THE
; 249 ; MICROINSTRUCTION DEFINITION. THE ADDRESS OF THE MICROINSTRUCTION BECOMES THE
; 250 ; VALUE OF THE SYMBOL IN THE FIELD NAMED "J". EXAMPLE:
; 251 ;
; 252 ; FOO: J/FOO
; 253 ;
; 254 ; THIS IS A MICROINSTRUCTION WHOSE "J" FIELD (JUMP ADDRESS) CONTAINS THE VALUE
; 255 ; "FOO". IT ALSO DEFINES THE SYMBOL "FOO" TO BE THE ADDRESS OF ITSELF.
; 256 ; THEREFORE, IF EXECUTED BY THE MICROPROCESSOR, IT WOULD LOOP ON ITSELF.
; 257 ;
; 258 ;
; 259 ;
; 260 ; 4.0 COMMENTS
; 261 ;
; 262 ; A SEMICOLON ANYWHERE ON A LINE CAUSES THE REST OF THE LINE TO BE IGNORED BY THE
; 263 ; ASSEMBLER. THIS TEXT IS AN EXAMPLE OF COMMENTS.
; 264 ;
; 265 ;
; 266 ;
; 267 ; 5.0 MICROINSTRUCTION DEFINITION
; 268 ;
; 269 ; A WORD OF MICROCODE IS DEFINED BY SPECIFYING A FIELD NAME, FOLLOWED BY SLASH
; 270 ; (/), FOLLOWED BY A VALUE. THE VALUE MAY BE A SYMBOL DEFINED FOR THAT FIELD, AN
; 271 ; OCTAL DIGIT STRING, OR A DECIMAL DIGIT STRING (DISTINGUISHED BY THE FACT THAT IT
; 272 ; CONTAINS "8" AND/OR "9" AND/OR IS TERMINATED BY A PERIOD). SEVERAL FIELDS MAY
; 273 ; BE SPECIFIED IN ONE MICROINSTRUCTION BY SEPARATING FIELD/VALUE SPECIFICATIONS
; 274 ; WITH COMMAS. EXAMPLE:
; 275 ;
; 276 ; AD/ZERO,RAMADR/AC*#,ACALU/AC+N,ACN/1,DBUS/DP
; 277 ;
; 278 ;
; 279 ; 6.0 CONTINUATION
; 280 ;
; 281 ; THE DEFINITION OF A MICROINSTRUCTION MAY CONTINUED ONTO TWO OR MORE LINES BY
; 282 ; BREAKING IT AFTER ANY COMMA. IN OTHER WORDS, IF THE LAST NON-BLANK, NON-COMMENT
; 283 ; CHARACTER ON A LINE IS A COMMA, THE INSTRUCTION SPECIFICATION IS CONTINUED ON
; 284
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 9
; KS10.MIC[7,3] 14:54 7-JAN-1986 HOW TO READ THE MICROCODE
; 285 ; THE FOLLOWING LINE. EXAMPLE:
; 286 ; READ [AR], ;LOOK AT EFFECTIVE ADDRESS
; 287 ; SKIP DP18, ;SEE IF RIGHT OR LEFT SHIFT
; 288 ; SC_SHIFT-1, ;PUT NUMBER OF PLACE TO
; 289 ; ;SHIFT IN SC
; 290 ; LOAD FE, ; AND IN FE
; 291 ; INST DISP ;GO DO THE SHIFT
; 292 ;
; 293 ;
; 294 ;
; 295 ; 7.0 MACROS
; 296 ;
; 297 ; A MACRO IS A SYMBOL WHOSE VALUE IS ONE OR MORE FIELD/VALUE SPECIFICATIONS AND/OR
; 298 ; MACROS. A MACRO DEFINITION IS A LINE CONTAINING THE MACRO NAME FOLLOWED BY A
; 299 ; QUOTED STRING WHICH IS THE VALUE OF THE MACRO. EXAMPLE:
; 300 ;
; 301 ; LOAD VMA "MEM/1, LDVMA/1
; 302 ;
; 303 ; THE APPEARANCE OF A MACRO IN A MICROINSTRUCTION DEFINITION IS EQUIVALENT TO THE
; 304 ; APPEARANCE OF ITS VALUE.
; 305 ;
; 306 ; MACRO MAY HAVE PARAMETERS ENCLOSED IN []. FOR EXAMPLE,
; 307 ;
; 308 ; []_[] "AD/A,A/@2,DEST/AD,B/@1"
; 309 ;
; 310 ; THE @1 GETS REPLACED BY WHAT IS WRITTEN IN THE FIRST SET OF [] AND @2 IS
; 311 ; REPLACED BY WHAT IS WRITTEN IN THE SECOND SET OF []. THUS
; 312 ;
; 313 ; [AR]_[ARX]
; 314 ;
; 315 ; HAS THE SAME EFFECT AS SAYING
; 316 ;
; 317 ; AD/A,A/ARX,DEST/AD,B/AR
; 318 ;
; 319 ;
; 320 ; SEE DESCRIPTION OF RULES FOR MACRO NAMES.
; 321 ;
; 322 ; 8.0 PSEUDO OPS
; 323 ;
; 324 ; THE MICRO ASSEMBLER HAS 13 PSEUDO-OPERATORS:
; 325 ;
; 326 ; .DCODE AND .UCODE SELECT THE RAM INTO WHICH SUBSEQUENT MICROCODE WILL BE
; 327 ; LOADED, AND THEREFORE THE FIELD DEFINITIONS AND MACROS WHICH ARE
; 328 ; MEANINGFUL IN SUBSEQUENT MICROCODE
; 329 ; .TITLE DEFINES A STRING OF TEXT TO APPEAR IN THE PAGE HEADER, AND
; 330 ; .TOC DEFINES AN ENTRY FOR THE TABLE OF CONTENTS AT THE BEGINNING.
; 331 ; .SET DEFINES THE VALUE OF A CONDITIONAL ASSEMBLY PARAMETER,
; 332 ; .CHANGE REDEFINES A CONDITIONAL ASSEMBLY PARAMETER,
; 333 ; .DEFAULT ASSIGNS A VALUE TO AN UNDEFINED PARAMETER.
; 334 ; .IF ENABLES ASSEMBLY IF THE VALUE OF THE PARAMETER IS NOT ZERO,
; 335 ; .IFNOT ENABLES ASSEMBLY IF THE PARAMETER VALUE IS ZERO, AND
; 336 ; .ENDIF RE-ENABLES ASSEMBLY IF SUPPRESSED BY THE PARAMETER NAMED.
; 337 ; .NOBIN TURNS OFF THE BINARY A GETS RID OF THE SPACE USED TO LIST IT,
; 338 ; .BIN TURN BINARY BACK ON AGAIN.
; 339 ; .WIDTH CONTROLS THE NUMBER OF BITS IN THE CRAM
; 340
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 10
; KS10.MIC[7,3] 14:54 7-JAN-1986 HOW TO READ THE MICROCODE
; 341 ; 9.0 LOCATION CONTROL
; 342 ;
; 343 ; A MICROINSTRUCTION "LABELLED" WITH A NUMBER IS ASSIGNED TO THAT ADDRESS.
; 344 ;
; 345 ; THE CHARACTER "=" AT THE BEGINNING OF A LINE, FOLLOWED BY A STRING OF 0'S, 1'S,
; 346 ; AND/OR *'S, SPECIFIES A CONSTRAINT ON THE ADDRESS OF FOLLOWING
; 347 ; MICROINSTRUCTIONS. THE NUMBER OF CHARACTERS IN THE CONSTRAINT STRING (EXCLUDING
; 348 ; THE "=") IS THE NUMBER OF LOW-ORDER BITS CONSTRAINED IN THE ADDRESS. THE
; 349 ; MICROASSEMBLER ATTEMPTS TO FIND AN UNUSED LOCATION WHOSE ADDRESS HAS 0 BITS IN
; 350 ; THE POSITIONS CORRESPONDING TO 0'S IN THE CONSTRAINT STRING AND 1 BITS WHERE THE
; 351 ; CONSTRAINT HAS 1'S. ASTERISKS DENOTE "DON'T CARE" BIT POSITIONS.
; 352 ;
; 353 ; IF THERE ARE ANY 0'S IN THE CONSTRAINT STRING, THE CONSTRAINT IMPLIES A BLOCK OF
; 354 ; <2**N> MICROWORDS, WHERE N IS THE NUMBER OF 0'S IN THE STRING. ALL LOCATIONS IN
; 355 ; THE BLOCK WILL HAVE 1'S IN THE ADDRESS BITS CORRESPONDING TO 1'S IN THE STRING,
; 356 ; AND BIT POSITIONS DENOTED BY *'S WILL BE THE SAME IN ALL LOCATIONS OF THE BLOCK.
; 357 ;
; 358 ; IN SUCH A CONSTRAINT BLOCK, THE DEFAULT ADDRESS PROGRESSION IS COUNTING IN THE
; 359 ; "0" POSITIONS OF THE CONSTRAINT STRING, BUT A NEW CONSTRAINT STRING OCCURING
; 360 ; WITHIN A BLOCK MAY FORCE SKIPPING OVER SOME LOCATIONS OF THE BLOCK. WITHIN A
; 361 ; BLOCK, A NEW CONSTRAINT STRING DOES NOT CHANGE THE PATTERN OF DEFAULT ADDRESS
; 362 ; PROGRESSION, IT MERELY ADVANCES THE LOCATION COUNTER OVER THOSE LOCATIONS. THE
; 363 ; MICROASSEMBLER WILL LATER FILL THEM IN.
; 364 ;
; 365 ; A NULL CONSTRAINT STRING ("=" FOLLOWED BY ANYTHING BUT "0", "1", OR "*") SERVES
; 366 ; TO TERMINATE A CONSTRAINT BLOCK. EXAMPLES:
; 367 ;
; 368 ; =0
; 369 ;
; 370 ; THIS SPECIFIES THAT THE LOW-ORDER ADDRESS BIT MUST BE ZERO-- THE MICROASSEMBLER
; 371 ; FINDS AN EVEN-ODD PAIR OF LOCATIONS, AND PUTS THE NEXT TWO MICROINSTRUCTIONS
; 372 ; INTO THEM.
; 373 ;
; 374 ; =11
; 375 ; THIS SPECIFIES THAT THE TWO LOW-ORDER BITS OF THE ADDRESS MUST BOTH BE ONES.
; 376 ; SINCE THERE ARE NO 0'S IN THIS CONSTRAINT, THE ASSEMBLER FINDS ONLY ONE LOCATION
; 377 ; MEETING THE CONSTRAINT.
; 378 ;
; 379 ; =0*****
; 380 ;
; 381 ; THIS SPECIFIES AN ADDRESS IN WHICH THE "40" BIT IS ZERO. DUE TO THE
; 382 ; IMPLEMENTATION OF THIS FEATURE IN THE ASSEMBLER, THE DEFAULT ADDRESS PROGRESSION
; 383 ; APPLIES ONLY TO THE LOW-ORDER 5 BITS, SO THIS CONSTRAINT FINDS ONE WORD IN WHICH
; 384 ; THE "40" BIT IS ZERO, AND DOES NOT ATTEMPT TO FIND ONE IN WHICH THAT BIT IS A
; 385 ; ONE. THIS LIMITATION HAS BEEN CHANGED WITH NEWER ASSEMBLER VERSIONS. HOWEVER
; 386 ; NONE OF THE LOCATIONS IN THE MICROCODE REQUIRE ANYTHING BUT THE CONSTRAINT
; 387 ; MENTIONED ABOVE.
; 388
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 11
; KS10.MIC[7,3] 14:54 7-JAN-1986 CONDITIONAL ASSEMBLY DEFINITIONS
; 389 .TOC "CONDITIONAL ASSEMBLY DEFINITIONS"
; 390
; 391 .DEFAULT/SIM=0 ;0=RUN ON REAL HARDWARE
; 392 ;1=RUN UNDER SIMULATOR
; 393
; 394 .DEFAULT/FULL=1 ;0=INCLUDE ONLY BASIC INSTRUCTIONS
; 395 ;1=INCLUDE FULL INSTRUCTION SET
; 396
; 397 .DEFAULT/INHCST=0 ;0=NO CODE TO INHIBIT CST UPDATE IF CSB=0
; 398 ;1=DON'T UPDATE CST IF CSB=0
; 399
; 400 .DEFAULT/NOCST=0 ;0=INCLUDE SUPPORT FOR WRITING THE CST
; 401 ;1=COMPLETELY DESUPPORT CST (FOR TOPS-10)
; 402
; 403 .DEFAULT/UBABLT=0 ;0=NO UBABLT SUPPORT
; 404 ;1=SUPPORT UBA STYLE BLT INSTRUCTIONS.
; 405
; 406 .DEFAULT/KIPAGE=1 ;0=DON'T SUPPORT KI PAGING
; 407 ;1=DO
; 408
; 409 .DEFAULT/KLPAGE=1 ;0=DON'T SUPPORT KL PAGING
; 410 ;1=DO
; 411
;;412 .IF/UBABLT ;THESE INSTRUCTIONS
;;413 .IF/KLPAGE
;;414 .CHANGE/KIPAGE=0
;;415 .ENDIF/KLPAGE
;;416 .IF/KIPAGE ;ALLOW ONLY ONE PAGING MODE
;;417 .CHANGE/KLPAGE=0
;;418 .ENDIF/KIPAGE
; 419 .ENDIF/UBABLT ;OTHERWISE, MAY HAVE EITHER OR BOTH
; 420
;;421 .IF/NOCST
;;422 .CHANGE/INHCST=0
; 423 .ENDIF/NOCST
; 424
; 425 .DEFAULT/NONSTD=0 ;0=STANDARD MICROCODE
; 426 ;1=NON-STANDARD MICROCODE
; 427
; 428 .WIDTH/108 ;ONLY FIELDS BETWEEN BITS 0 AND 107 EVER
; 429 ; GET LOADED INTO THE CRAM. OTHER FIELDS
; 430 ; ARE USED FOR DEFAULTING PROCESS.
; 431
; 432 .REGION/0,1377/2000,3777/1400,1777
; 433 ;TRY AND KEEP STUFF OUT OF DROM SPACE
; 434
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 12
; KS10.MIC[7,3] 14:54 7-JAN-1986 2901 REGISTER USAGE
; 435 .TOC "2901 REGISTER USAGE"
; 436
; 437 ; !=========================================================================!
; 438 ;0: ! MAG (ONES IN BITS 1-36, REST ZERO) !
; 439 ; !-------------------------------------------------------------------------!
; 440 ;1: ! PC (ADDRESS OF CURRENT INSTRUCTION + 1) !
; 441 ; !-------------------------------------------------------------------------!
; 442 ;2: ! HR (CURRENT INSTRUCTION) !
; 443 ; !-------------------------------------------------------------------------!
; 444 ;3: ! AR (TEMP -- MEM OP AT INST START) !
; 445 ; !-------------------------------------------------------------------------!
; 446 ;4: ! ARX (TEMP -- LOW ORDER HALF OF DOUBLE PREC) !
; 447 ; !-------------------------------------------------------------------------!
; 448 ;5: ! BR (TEMP) !
; 449 ; !-------------------------------------------------------------------------!
; 450 ;6: ! BRX (TEMP -- LOW ORDER HALF OF DOUBLE PREC BR!BRX) !
; 451 ; !-------------------------------------------------------------------------!
; 452 ;7: ! ONE (THE CONSTANT 1) !
; 453 ; !-------------------------------------------------------------------------!
; 454 ;10: ! EBR (EXEC BASE REGISTER) !
; 455 ; !-------------------------------------------------------------------------!
; 456 ;11: ! UBR (USER BASE REGISTER) !
; 457 ; !-------------------------------------------------------------------------!
; 458 ;12: ! MASK (ONES IN BITS 0-35, ZERO IN -1, -2, 36 AND 37) !
; 459 ; !-------------------------------------------------------------------------!
; 460 ;13: ! FLG (FLAG BITS) ! PAGE FAIL CODE !
; 461 ; !-------------------------------------------------------------------------!
; 462 ;14: ! PI (PI SYSTEM STATUS REGISTER [RDPI]) !
; 463 ; !-------------------------------------------------------------------------!
; 464 ;15: ! XWD1 (1 IN EACH HALF WORD) !
; 465 ; !-------------------------------------------------------------------------!
; 466 ;16: ! T0 (TEMP) !
; 467 ; !-------------------------------------------------------------------------!
; 468 ;17: ! T1 (TEMP) !
; 469 ; !=========================================================================!
; 470
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 13
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- LISTING FORMAT
; 471 .TOC "MICROCODE FIELDS -- LISTING FORMAT"
; 472
; 473 ; ; 3633 1561:
; 474 ; ; 3634 SUB: [AR]_AC-[AR],
; 475 ; ; 3635 AD FLAGS, 3T,
; 476 ; U 1561, 1500,2551,0303,0274,4463,7701,4200,0001,0001 ; 3636 EXIT
; 477 ; [--] [--] !!!! [][] !!![-][][-][]! !!! [----]
; 478 ; ! ! !!!! ! ! !!!! ! ! ! ! !!! !
; 479 ; ! ! !!!! ! ! !!!! ! ! ! ! !!! +---- # (MAGIC NUMBER)
; 480 ; ! ! !!!! ! ! !!!! ! ! ! ! !!!
; 481 ; ! ! !!!! ! ! !!!! ! ! ! ! !!+------------- MULTI PREC, MULTI SHIFT, CALL (4S, 2S, 1S)
; 482 ; ! ! !!!! ! ! !!!! ! ! ! ! !!
; 483 ; ! ! !!!! ! ! !!!! ! ! ! ! !+-------------- FM WRITE, MEM, DIVIDE (4S, 2S, 1S)
; 484 ; ! ! !!!! ! ! !!!! ! ! ! ! !
; 485 ; ! ! !!!! ! ! !!!! ! ! ! ! +--------------- CRY38, LOAD SC, LOAD FE (4S, 2S, 1S)
; 486 ; ! ! !!!! ! ! !!!! ! ! ! !
; 487 ; ! ! !!!! ! ! !!!! ! ! ! +----------------- T
; 488 ; ! ! !!!! ! ! !!!! ! ! !
; 489 ; ! ! !!!! ! ! !!!! ! ! +------------------- SKIP
; 490 ; ! ! !!!! ! ! !!!! ! !
; 491 ; ! ! !!!! ! ! !!!! ! +---------------------- DISP
; 492 ; ! ! !!!! ! ! !!!! !
; 493 ; ! ! !!!! ! ! !!!! +------------------------ SPEC
; 494 ; ! ! !!!! ! ! !!!!
; 495 ; ! ! !!!! ! ! !!!+--------------------------- CLOCKS & PARITY (CLKR, GENR, CHKR, CLKL, GENL, CHKL)
; 496 ; ! ! !!!! ! ! !!!
; 497 ; ! ! !!!! ! ! !!+---------------------------- DBM
; 498 ; ! ! !!!! ! ! !!
; 499 ; ! ! !!!! ! ! !+----------------------------- DBUS
; 500 ; ! ! !!!! ! ! !
; 501 ; ! ! !!!! ! ! +------------------------------ RAM ADDRESS
; 502 ; ! ! !!!! ! !
; 503 ; ! ! !!!! ! +--------------------------------- B
; 504 ; ! ! !!!! !
; 505 ; ! ! !!!! +----------------------------------- A
; 506 ; ! ! !!!!
; 507 ; ! ! !!!+------------------------------------- DEST
; 508 ; ! ! !!!
; 509 ; ! ! !!+-------------------------------------- RSRC
; 510 ; ! ! !!
; 511 ; ! ! !+--------------------------------------- LSRC ]
; 512 ; ! ! ! ] - AD
; 513 ; ! ! +---------------------------------------- ALU ]
; 514 ; ! !
; 515 ; ! +--------------------------------------------- J
; 516 ; !
; 517 ; LOCATION OF THIS MICRO WORD
; 518
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 14
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- DATAPATH CHIP
; 519 .TOC "MICROCODE FIELDS -- DATAPATH CHIP"
; 520
; 521 J/=<0:11>+ ;CRA1
; 522 ;NEXT MICROCODE ADDRESS
; 523
; 524 ;ALU FUNCTIONS
; 525
; 526 ;NOTE: THE AD FIELD IS A 2 DIGIT FIELD. THE LEFT DIGIT IS THE
; 527 ; 2901 ALU FUNCTION. THE RIGHT DIGIT IS THE 2901 SRC CODE FOR
; 528 ; THE LEFT HALF. NORMALY THE RIGHT HALF SRC CODE IS THE SAME AS
; 529 ; THE LEFT HALF.
; 530 AD/=<12:17>D,44 ;DPE1 & DPE2
; 531 A+Q=00
; 532 A+B=01
; 533 0+Q=02
; 534 0+B=03
; 535 0+A=04
; 536 D+A=05
; 537 D+Q=06
; 538 0+D=07
; 539 Q-A-.25=10
; 540 B-A-.25=11
; 541 Q-.25=12
; 542 B-.25=13
; 543 A-.25=14
; 544 A-D-.25=15
; 545 Q-D-.25=16
; 546 -D-.25=17
; 547 A-Q-.25=20
; 548 A-B-.25=21
; 549 -Q-.25=22
; 550 -B-.25=23
; 551 -A-.25=24
; 552 D-A-.25=25
; 553 D-Q-.25=26
; 554 D-.25=27
; 555 A.OR.Q=30
; 556 A.OR.B=31
; 557 Q=32
; 558 B=33
; 559 A=34
; 560 D.OR.A=35
; 561 D.OR.Q=36
; 562 D=37
; 563 A.AND.Q=40
; 564 A.AND.B=41
; 565
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 15
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- DATAPATH CHIP
; 566 ;MORE ALU FUNCTIONS
; 567
; 568 ZERO=42
; 569 ; ZERO=43
; 570 ; ZERO=44
; 571 D.AND.A=45
; 572 D.AND.Q=46
; 573 ; ZERO=47
; 574 .NOT.A.AND.Q=50
; 575 .NOT.A.AND.B=51
; 576 ; Q=52
; 577 ; B=53
; 578 ; A=54
; 579 .NOT.D.AND.A=55
; 580 .NOT.D.AND.Q=56
; 581 ; ZERO=57
; 582 A.XOR.Q=60
; 583 A.XOR.B=61
; 584 ; Q=62
; 585 ; B=63
; 586 ; A=64
; 587 D.XOR.A=65
; 588 D.XOR.Q=66
; 589 ; D=67
; 590 A.EQV.Q=70
; 591 A.EQV.B=71
; 592 .NOT.Q=72
; 593 .NOT.B=73
; 594 .NOT.A=74
; 595 D.EQV.A=75
; 596 D.EQV.Q=76
; 597 .NOT.D=77
; 598
; 599 ;THIS FIELD IS THE RIGHTMOST 3 BITS OF THE
; 600 ; AD FIELD. IT IS USED ONLY TO DEFAULT THE RSRC
; 601 ; FIELD.
; 602 LSRC/=<15:17> ;DPE1
; 603
; 604 ;THIS IS THE SOURCE FOR THE RIGHT HALF OF THE
; 605 ; DATA PATH. IT LETS US MAKE THE RIGHT AND LEFT
; 606 ; HALF WORDS DO SLIGHTLY DIFFERENT THINGS.
; 607 RSRC/=<18:20>F,LSRC ;DPE2
; 608 AQ=0 ;A Q
; 609 AB=1 ;A B
; 610 0Q=2 ;0 Q
; 611 0B=3 ;0 B
; 612 0A=4 ;0 A
; 613 DA=5 ;D A
; 614 DQ=6 ;D Q
; 615 D0=7 ;D 0
; 616
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 16
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- DATAPATH CHIP
; 617 ;DESTINATION CONTROL
; 618 ;SEE DPE1 AND DPE2 (2'S WEIGHT IS INVERTED ON DPE5)
; 619 DEST/=<21:23>D,3 ;DPE1 & DPE2
; 620 A=0 ;A REG IS CHIP OUTPUT, AD IS WRITTEN
; 621 ; INTO REG FILE
; 622 AD=1 ;REG FILE GETS AD
; 623 Q_AD=2 ;REG FILE IS NOT LOADED
; 624 PASS=3 ;AD OUTPUT IS CHIP OUTPUT
; 625 ; Q AND REG FILE LEFT ALONE
; 626 Q_Q*2=4 ;ALSO REG FILE GETS AD*2
; 627 AD*2=5 ;AND Q IS LEFT ALONE
; 628 Q_Q*.5=6 ;ALSO REG FILE GETS AD*.5
; 629 AD*.5=7 ;AND Q IS LEFT ALONE
; 630
; 631 ; <24:25> ;UNUSED
; 632
; 633 A/=<26:29> ;DPE1 & DPE2
; 634 MAG=0
; 635 PC=1
; 636 HR=2
; 637 AR=3
; 638 ARX=4
; 639 BR=5
; 640 BRX=6
; 641 ONE=7
; 642 EBR=10
; 643 UBR=11
; 644 MASK=12
; 645 FLG=13
; 646 PI=14
; 647 XWD1=15
; 648 T0=16
; 649 T1=17
; 650
; 651 ; <30:31> ;UNUSED
; 652
; 653 B/=<32:35>D,0 ;DPE1 & DPE2
; 654 MAG=0
; 655 PC=1
; 656 HR=2
; 657 AR=3
; 658 ARX=4
; 659 BR=5
; 660 BRX=6
; 661 ONE=7
; 662 EBR=10
; 663 UBR=11
; 664 MASK=12
; 665 FLG=13
; 666 PI=14
; 667 XWD1=15
; 668 T0=16
; 669 T1=17
; 670
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 17
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- RAM FILE ADDRESS AND D-BUS
; 671 .TOC "MICROCODE FIELDS -- RAM FILE ADDRESS AND D-BUS"
; 672
; 673 RAMADR/=<36:38>D,4 ;DPE6
; 674 AC#=0 ;AC NUMBER
; 675 AC*#=1 ;AC .FN. #
; 676 XR#=2 ;INDEX REGISTER
; 677 VMA=4 ;VIRTUAL MEMORY REFERENCE
; 678 RAM=6 ;VMA SUPPLIES 10-BIT RAM ADDRESS
; 679 #=7 ;ABSOLUTE RAM FILE REFERENCE
; 680
; 681 ; <39:39>
; 682
; 683 ;LEFT HALF ON DPE3 AND RIGHT HALF ON DPE4
; 684 DBUS/=<40:41>D,1 ;DPE3 & DPE4
; 685 PC FLAGS=0 ;PC FLAGS IN LEFT HALF
; 686 PI NEW=0 ;NEW PI LEVEL IN BITS 19-21
; 687 ; VMA=0 ;VMA IN BITS 27-35
; 688 DP=1 ;DATA PATH
; 689 RAM=2 ;CACHE, AC'S AND WORKSPACE
; 690 DBM=3 ;DBM MIXER
; 691
; 692 ;LEFT HALF ON DPM1 AND RIGHT HALF ON DPM2
; 693 DBM/=<42:44>D,7 ;DPM1 & DPM2
; 694 SCAD DIAG=0 ;(LH) SCAD DIAGNOSTIC
; 695 PF DISP=0 ;PAGE FAIL DISP IN BITS 18-21
; 696 APR FLAGS=0 ;APR FLAGS IN BITS 22-35
; 697 BYTES=1 ;5 COPIES OF SCAD 1-7
; 698 EXP=2 ;LH=EXPONENT, RH=TIME FRACTION
; 699 DP=3 ;DATA PATH
; 700 DP SWAP=4 ;DATA PATH SWAPPED
; 701 VMA=5 ;VMA FLAGS,,VMA
; 702 MEM=6 ;MEMORY BUFFER
; 703 #=7 ;NUMBER FIELD IN BOTH HALVES
; 704
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 18
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- PARITY GENERATION & HALF WORD CONTROL
; 705 .TOC "MICROCODE FIELDS -- PARITY GENERATION & HALF WORD CONTROL"
; 706
; 707 AD PARITY OK/=<108>D,0 ;**NOT STORED IN CRAM**
; 708 ;THIS BIT IS A 1 IF THE ALU IS DOING
; 709 ; SOMETHING WHICH DOES NOT INVALIDATE
; 710 ; PARITY. IT DOES NOT APPEAR IN THE
; 711 ; REAL MACHINE. WE JUST USE IT TO SET
; 712 ; THE DEFAULT FOR GENR & GENL
; 713
; 714 CLKL/=<45:45>D,1 ;DPE5
; 715 ;CLOCK THE LEFT HALF OF THE MACHINE
; 716 GENL/=<46:46>F,AD PARITY OK ;DPE4 FROM CRM2 PARITY EN LEFT H
; 717 ;STORE PARITY FOR 2901 LEFT
; 718 CHKL/=<47:47> ;DPE4 FROM CRM2 PARITY CHK LEFT H
; 719 ;CHECK LEFT HALF DBUS PARITY
; 720
; 721 CLKR/=<48:48>D,1 ;DPE5
; 722 ;CLOCK THE RIGHT HALF OF THE MACHINE
; 723 GENR/=<49:49>F,AD PARITY OK ;DPE4 FROM CRM2 PARITY EN RIGHT H
; 724 ;STORE PARITY FOR 2901 RIGHT
; 725 CHKR/=<50:50> ;DPE4 FROM CRM2 PARITY CHK RIGHT H
; 726 ;CHECK RIGHT HALF DBUS PARITY
; 727
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 19
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- SPEC
; 728 .TOC "MICROCODE FIELDS -- SPEC"
; 729
; 730
; 731 ;
; 732 ;THE FOLLOWING SPECIAL FUNCTION ARE DECODED ON DPE1, DPE5, AND DPMA:
; 733 ; !=========================================================================!
; 734 ; !S! EFFECT ! CRA6 SPEC ! CRA6 SPEC ! CRA6 SPEC !
; 735 ; !P! ON SHIFT ! EN 40 ! EN 20 ! EN 10 !
; 736 ; !E! PATHS ! E102 ON DPE5 ! E101 ON DPE5 ! E410 ON DPMA !
; 737 ; !C! (SEE DPE1) ! ! E411 ON DPMA ! E113 ON CRA2 !
; 738 ; !=========================================================================!
; 739 ; !0! NORMAL ! CRY 18 INH ! PREVIOUS ! # !
; 740 ; !-------------------------------------------------------------------------!
; 741 ; !1! ZERO ! IR LOAD ! XR LOAD ! CLR 1 MSEC !
; 742 ; !-------------------------------------------------------------------------!
; 743 ; !2! ONES ! <SPARE> ! <SPARE> ! CLR IO LATCH !
; 744 ; !-------------------------------------------------------------------------!
; 745 ; !3! ROT ! PI LOAD ! APR FLAGS ! CLR IO BUSY !
; 746 ; !-------------------------------------------------------------------------!
; 747 ; !4! ASHC ! ASH TEST ! SET SWEEP ! PAGE WRITE !
; 748 ; !-------------------------------------------------------------------------!
; 749 ; !5! LSHC ! EXP TEST ! APR EN ! NICOND !
; 750 ; !-------------------------------------------------------------------------!
; 751 ; !6! DIV ! PC FLAGS ! PXCT OFF ! PXCT EN !
; 752 ; !-------------------------------------------------------------------------!
; 753 ; !7! ROTC ! AC BLOCKS EN ! MEM CLR ! MEM WAIT !
; 754 ; !=========================================================================!
; 755 ; THE DPM BOARD USES THE SPEC FIELD TO CONTROL THE
; 756 ; DBM MIXER, AS FOLLOWS:
; 757 ;
; 758 ; !=====================================!
; 759 ; ! S ! !
; 760 ; ! P ! ACTION WHEN DBM !
; 761 ; ! E ! SELECTS DP !
; 762 ; ! C ! GET DP BITS ! GET SCAD 1-7 !
; 763 ; !=====================================!
; 764 ; ! 0 ! ALL ! NONE !
; 765 ; !-------------------------------------!
; 766 ; ! 1 ! 7-35 ! 0-6 !
; 767 ; !-------------------------------------!
; 768 ; ! 2 !0-6 AND 14-35 ! 7-13 !
; 769 ; !-------------------------------------!
; 770 ; ! 3 !0-13 AND 21-35! 14-20 !
; 771 ; !-------------------------------------!
; 772 ; ! 4 !0-20 AND 28-35! 21-27 !
; 773 ; !-------------------------------------!
; 774 ; ! 5 ! 0-27 AND 35 ! 28-34 !
; 775 ; !-------------------------------------!
; 776 ; ! 6 ! SAME AS ZERO !
; 777 ; !-------------------------------------!
; 778 ; ! 7 ! SAME AS ZERO !
; 779 ; !=====================================!
; 780
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 20
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- SPEC
; 781 ;THE SPEC FIELD IS DEFINED AS A 6-BIT FIELD. THE TOP 3 BITS
; 782 ; ARE SPEC SEL A, SPEC SEL B, AND SPEC SEL C. THE LOW 3 BITS ARE
; 783 ; THE SELECT CODE.
; 784
; 785 SPEC/=<51:56>D,0 ;DPE1 & DPE5 & DPM1 & DPMA
; 786 #=10 ;DECODE # BITS
; 787 CLRCLK=11 ;CLEAR 1MS NICOND FLAG
; 788 CLR IO LATCH=12 ;CLEAR IO LATCH
; 789 CLR IO BUSY=13 ;CLEAR IO BUSY
; 790 LDPAGE=14 ;WRITE PAGE TABLE
; 791 NICOND=15 ;DOING NICOND DISPATCH
; 792 LDPXCT=16 ;LOAD PXCT FLAGS
; 793 WAIT=17 ;MEM WAIT
; 794 PREV=20 ;FORCE PREVIOUS CONTEXT
; 795 LOADXR=21 ;LOAD XR #, USES PXCT FIELD TO SELECT
; 796 ; CORRECT AC BLOCK
; 797 APR FLAGS=23 ;LOAD APR FLAGS
; 798 CLRCSH=24 ;CLEAR CACHE
; 799 APR EN=25 ;SET APR ENABLES
; 800 MEMCLR=27 ;CLEAR PAGE FAULT CONDITION
; 801 SWEEP=34 ;SET SWEEP
; 802 PXCT OFF=36 ;TURN OFF THE EFFECT OF PXCT
; 803 INHCRY18=40 ;INHIBIT CARRY INTO LEFT HALF
; 804 LOADIR=41 ;LOAD THE IR
; 805 LDPI=43 ;LOAD PI SYSTEM
; 806 ASHOV=44 ;TEST RESULT OF ASH
; 807 EXPTST=45 ;TEST RESULT OF FLOATING POINT
; 808 FLAGS=46 ;CHANGE PC FLAGS
; 809 LDACBLK=47 ;LOAD AC BLOCK NUMBERS
; 810 LDINST=61 ;LOAD INSTRUCTION
; 811
; 812 ;THE SPEC FIELD IS REDEFINED WHEN USED FOR BYTE MODE STUFF
; 813 BYTE/=<54:56> ;DPM1 (SPEC SEL)
; 814 BYTE1=1
; 815 BYTE2=2
; 816 BYTE3=3
; 817 BYTE4=4
; 818 BYTE5=5
; 819
; 820 ;THE SPEC FIELD IS REDEFINED WHEN USED TO CONTROL SHIFT PATHS
; 821 SHSTYLE/=<54:56> ;DPE1 (SPEC SEL)
; 822 NORM=0 ;2 40-BIT REGISTERS
; 823 ZERO=1 ;SHIFT ZERO INTO 36 BITS (ASH TOP 2901)
; 824 ONES=2 ;SHIFT IN ONES
; 825 ROT=3 ;ROTATE
; 826 ASHC=4 ;ASHC
; 827 LSHC=5 ;LSHC
; 828 DIV=6 ;SPECIAL DIVIDE
; 829 ROTC=7 ;ROTATE DOUBLE
; 830
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 21
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- DISPATCH
; 831 .TOC "MICROCODE FIELDS -- DISPATCH"
; 832 ; !=======================================================!
; 833 ; ! D ! CRA1 ! CRA1 ! DPEA !
; 834 ; ! I ! DISP ! DISP ! DISP !
; 835 ; ! S ! 10 ! 20 ! 40 !
; 836 ; ! P ! ! ! !
; 837 ; !=======================================================!
; 838 ; ! 0 ! DIAG ADR ! DIAG ADR ! 0 !
; 839 ; !-------------------------------------------------------!
; 840 ; ! 1 ! RETURN ! RETURN ! DP 18-21 !
; 841 ; !-------------------------------------------------------!
; 842 ; ! 2 ! MULTIPLY ! J ! J !
; 843 ; !-------------------------------------------------------!
; 844 ; ! 3 ! PAGE FAIL ! AREAD ! AREAD !
; 845 ; !-------------------------------------------------------!
; 846 ; ! 4 ! NICOND ! NOT USABLE ! NORM !
; 847 ; !-------------------------------------------------------!
; 848 ; ! 5 ! BYTE ! NOT USABLE ! DP 32-35 !
; 849 ; !-------------------------------------------------------!
; 850 ; ! 6 ! EA MODE ! NOT USABLE ! DROM A !
; 851 ; !-------------------------------------------------------!
; 852 ; ! 7 ! SCAD ! NOT USABLE ! DROM B !
; 853 ; !=======================================================!
; 854 ;NOTE: DISP EN 40 & DISP EN 10 ONLY CONTROL THE LOW 4 BITS OF THE
; 855 ; JUMP ADDRESS. DISP EN 20 ONLY CONTROLS THE HI 7 BITS. TO DO
; 856 ; SOMETHING TO ALL 11 BITS BOTH 20 & 40 OR 20 & 10 MUST BE ENABLED.
; 857
; 858 DISP/=<57:62>D,70 ;CRA1 & DPEA
; 859 CONSOLE=00 ;CONSOLE DISPATCH
; 860 DROM=12 ;DROM
; 861 AREAD=13 ;AREAD
; 862 DP LEFT=31 ;DP 18-21
; 863 NORM=34 ;NORMALIZE
; 864 DP=35 ;DP 32-35
; 865 ADISP=36 ;DROM A FIELD
; 866 BDISP=37 ;DROM B FIELD
; 867 RETURN=41 ;RETURN
; 868 MUL=62 ;MULTIPLY
; 869 PAGE FAIL=63 ;PAGE FAIL
; 870 NICOND=64 ;NEXT INSTRUCTION DISPATCH
; 871 BYTE=65 ;BYTE SIZE AND POSITION
; 872 EAMODE=66 ;EFFECTIVE ADDRESS MODE
; 873 SCAD0=67 ;J!2 IF SCAD BIT 0 = 1
; 874
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 22
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- SKIP
; 875 .TOC "MICROCODE FIELDS -- SKIP"
; 876 ; !=======================================================!
; 877 ; ! S ! CRA2 ! DPEA ! DPEA !
; 878 ; ! K ! SKIP ! SKIP ! SKIP !
; 879 ; ! I ! 10 ! 20 ! 40 !
; 880 ; ! P ! ! ! !
; 881 ; !=======================================================!
; 882 ; ! 0 ! 0 ! 0 ! 0 !
; 883 ; !-------------------------------------------------------!
; 884 ; ! 1 ! TRAP CYCLE ! CRY 02 ! CARRY OUT !
; 885 ; !-------------------------------------------------------!
; 886 ; ! 2 ! AD=0 ! ADL SIGN ! ADL=0 !
; 887 ; !-------------------------------------------------------!
; 888 ; ! 3 ! SC SIGN ! ADR SIGN ! ADR=0 !
; 889 ; !-------------------------------------------------------!
; 890 ; ! 4 ! EXECUTE ! USER IOT ! -USER !
; 891 ; !-------------------------------------------------------!
; 892 ; ! 5 ! -BUS IO BUSY ! JFCL SKIP ! FPD FLAG !
; 893 ; !-------------------------------------------------------!
; 894 ; ! 6 ! -CONTINUE ! CRY 01 ! AC # IS ZERO !
; 895 ; !-------------------------------------------------------!
; 896 ; ! 7 ! -1 MSEC ! TXXX ! INTERRUPT REQ !
; 897 ; !=======================================================!
; 898
; 899 SKIP/=<63:68>D,70 ;CRA2 & DPEA
; 900 IOLGL=04 ;(.NOT.USER)!(USER IOT)!(CONSOLE EXECUTE MODE)
; 901 LLE=12 ;AD LEFT .LE. 0
; 902 CRY0=31 ;AD CRY -2
; 903 ADLEQ0=32 ;ADDER LEFT = 0
; 904 ADREQ0=33 ;ADDER RIGHT = 0
; 905 KERNEL=34 ;.NOT. USER
; 906 FPD=35 ;FIRST PART DONE
; 907 AC0=36 ;AC NUMBER IS ZERO
; 908 INT=37 ;INTERRUPT REQUEST
; 909 LE=42 ;(AD SIGN)!(AD.EQ.0)
; 910 CRY2=51 ;AD CRY 02
; 911 DP0=52 ;AD SIGN
; 912 DP18=53 ;AD BIT 18
; 913 IOT=54 ;USER IOT
; 914 JFCL=55 ;JFCL SKIP
; 915 CRY1=56 ;AD CRY 1
; 916 TXXX=57 ;TEST INSTRUCTION SHOULD SKIP
; 917 TRAP CYCLE=61 ;THIS INSTRUCTION IS THE RESULT OF A
; 918 ; TRAP 1, 2, OR 3
; 919 ADEQ0=62 ;AD.EQ.0
; 920 SC=63 ;SC SIGN BIT
; 921 EXECUTE=64 ;CONSOLE EXECUTE MODE
; 922 -IO BUSY=65 ;.NOT. I/O LATCH
; 923 -CONTINUE=66 ;.NOT. CONTINUE
; 924 -1 MS=67 ;.NOT. 1 MS. TIMER
; 925
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 23
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- TIME CONTROL
; 926 .TOC "MICROCODE FIELDS -- TIME CONTROL"
; 927
; 928 DT/=<109:111>D,0 ;**NOT STORED IN CRAM**
; 929 ;DEFAULT TIME FIELD (USED IN MACROS)
; 930 ; CAN BE OVERRIDDEN IN MACRO CALL
; 931 2T=0
; 932 3T=1
; 933 4T=2
; 934 5T=3
; 935
; 936
; 937 T/=<69:71>F,DT ;CSL5 (E601)
; 938 ;CLOCK TICKS MINUS TWO REQUIRED TO
; 939 ; DO A MICRO INSTRUCTION
; 940 2T=0 ;TWO TICKS
; 941 3T=1 ;THREE TICKS
; 942 4T=2 ;FOUR TICKS
; 943 5T=3 ;FIVE TICKS
; 944
; 945
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 24
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- RANDOM CONTROL BITS
; 946 .TOC "MICROCODE FIELDS -- RANDOM CONTROL BITS"
; 947
; 948 CRY38/=<72> ;DPE5
; 949 ;INJECT A CARRY INTO THE 2901 ADDER
; 950 LOADSC/=<73> ;DPM4
; 951 ;LOAD THE STEP COUNTER FROM THE SCAD
; 952 LOADFE/=<74> ;DPM4
; 953 ;LOAD THE FE REGISTER FROM THE SCAD
; 954 FMWRITE/=<75> ;DPE5 (E302)
; 955 ;WRITE THE RAM FILE.
; 956 MEM/=<76> ;DPM5 (E612) & DPE5 (E205)
; 957 ;START (OR COMPLETE) A MEMORY OR I/O CYCLE UNDER
; 958 ; CONTROL OF THE NUMBER FIELD.
; 959 DIVIDE/=<77> ;DPE5
; 960 ;THIS MICROINSTRUCTION IS DOING A DIVIDE
; 961 MULTI PREC/=<78> ;DPE5
; 962 ;MULTIPRECISION STEP IN DIVIDE, DFAD, DFSB
; 963 MULTI SHIFT/=<79> ;CSL5 (HAS NOTHING TO DO WITH DPE5 MULTI SHIFT)
; 964 ;FAST SHIFT
; 965 CALL/=<80> ;CRA2 (STACK IS ON CRA3)
; 966 ;THIS IS A CALL
; 967
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 25
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- NUMBER FIELD
; 968 .TOC "MICROCODE FIELDS -- NUMBER FIELD"
; 969
; 970 ;HERE IS THE GENERAL FIELD
; 971 #/=<90:107> ;MANY PLACES
; 972
; 973 ;# REDEFINED WHEN USED AS SCAD CONTROL:
; 974 SCAD/=<90:92> ;DPM3
; 975 A*2=0
; 976 A.OR.B=1
; 977 A-B-1=2
; 978 A-B=3
; 979 A+B=4
; 980 A.AND.B=5
; 981 A-1=6
; 982 A=7
; 983 SCADA/=<93:95> ;DPM3
; 984 SC=0
; 985 S#=1
; 986 PTR44=2 ;44 AND BIT 6 (SEE DPM3)
; 987 BYTE1=3
; 988 BYTE2=4
; 989 BYTE3=5
; 990 BYTE4=6
; 991 BYTE5=7
; 992 SCADB/=<96:97> ;DPM3
; 993 FE=0
; 994 EXP=1
; 995 SHIFT=2
; 996 SIZE=3
; 997 S#/=<98:107> ;DPM3
; 998
; 999 ;# REDEFINED WHEN USED AS STATE REGISTER CONTROL:
; 1000 STATE/=<90:107> ;NOT USED BY HARDWARE
; 1001 SIMPLE=0 ;SIMPLE INSTRUCTIONS
; 1002 BLT=1 ;BLT IN PROGRESS
; 1003 MAP=400002 ;MAP IN PROGRESS
; 1004 SRC=3 ;MOVE STRING SOURCE IN PROGRESS
; 1005 DST=4 ;MOVE STRING FILL IN PROGRESS
; 1006 SRC+DST=5 ;MOVE STRING DEST IN PROGRESS
; 1007 DSTF=6 ;FILLING DEST
; 1008 CVTDB=7 ;CONVERT DEC TO BIN
; 1009 COMP-DST=10 ;COMPARE DEST
; 1010 EDIT-SRC=11 ;EDIT SOURCE
; 1011 EDIT-DST=12 ;EDIT DEST
; 1012 EDIT-S+D=13 ;BOTH SRC AND DST POINTERS
; 1013
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 26
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- NUMBER FIELD
; 1014 ;# REDEFINED WHEN USED AS WORSPACE ADDRESS
; 1015
; 1016 WORK/=<98:107> ;DPE6
; 1017 BADW0=160 ;AC BLK 7 WORD 0 (BAD DATA FROM MEMORY)
; 1018 BADW1=161 ;AC BLK 7 WORD 1 (BAD DATA FROM MEMORY)
; 1019 MUL=200 ;TEMP FOR MULTIPLY
; 1020 DIV=201 ;TEMP FOR DIVIDE
; 1021 SV.VMA=210 ;SAVE VMA
; 1022 SV.AR=211 ;SAVE AR
; 1023 SV.ARX=212 ;SAVE ARX
; 1024 SV.BR=213 ;SAVE BR
; 1025 SV.BRX=214 ;SAVE BRX
; 1026 SBR=215 ;SPT BASE REGISTER
; 1027 CBR=216 ;CST BASE ADDRESS
; 1028 CSTM=217 ;CST MASK
; 1029 PUR=220 ;PROCESS USE REGISTER
; 1030 ADJP=221 ;"P" FOR ADJBP
; 1031 ADJS=222 ;"S" FOR ADJBP
; 1032 ADJPTR=223 ;BYTE POINTER FOR ADJBP
; 1033 ADJQ1=224 ;TEMP FOR ADJBP
; 1034 ADJR2=225 ;TEMP FOR ADJBP
; 1035 ADJBPW=226 ;(BYTES/WORD) FOR ADJBP
; 1036 HSBADR=227 ;ADDRESS OF HALT STATUS BLOCK
; 1037 APR=230 ;APR ENABLES
; 1038 ;THE FOLLOWING WORDS ARE USED BY EXTEND INSTRUCTION
; 1039 E0=240 ;ORIGINAL EFFECTIVE ADDRESS
; 1040 E1=241 ;EFFECTIVE ADDRESS OF WORD AT E0
; 1041 SLEN=242 ;SOURCE LENGTH
; 1042 MSK=243 ;BYTE MASK
; 1043 FILL=244 ;FILL BYTE
; 1044 CMS=245 ;SRC BYTE IN STRING COMPARE
; 1045 FSIG=246 ;PLACE TO SAVE ARX WHILE STORING
; 1046 ; THE FLOAT CHAR
; 1047 BDH=247 ;BINARY BEING CONVERTED TO
; 1048 BDL=250 ; DECIMAL
; 1049
; 1050 ;TIMER STUFF
; 1051 TIME0=300 ;HIGH ORDER 36 BITS OF TIME
; 1052 TIME1=301 ;LOW ORDER 36 BITS OF TIME
; 1053 PERIOD=302 ;INTERRUPT PERIOD
; 1054 TTG=303 ;TIME TO GO TO NEXT INTERRUPT
; 1055
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 27
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- NUMBER FIELD
; 1056 ;DDIV STUFF
; 1057 AC0=314
; 1058 AC1=315
; 1059 AC2=316
; 1060 AC3=317
; 1061 DDIV SGN=320
; 1062 DVSOR H=321
; 1063 DVSOR L=322
; 1064 ;POWERS OF TEN
; 1065 DECLO=344 ;LOW WORD
; 1066 DECHI=373 ;HIGH WORD
; 1067
; 1068 YSAVE=422 ;Y OF LAST INDIRECT POINTER
; 1069 PTA.E=423 ;ADDRESS OF EXEC PAGE MAP (NOT PROCESS TABLE)
; 1070 PTA.U=424 ;ADDRESS OF USER PAGE MAP
; 1071 TRAPPC=425 ;SAVED PC FROM TRAP CYCLE
; 1072 SV.AR1=426 ;ANOTHER PLACE TO SAVE AR
; 1073
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 28
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- NUMBER FIELD
; 1074 ;# REDEFINED WHEN USED AS PC FLAG CONTROL (ALL ON DPE9)
; 1075
; 1076 SETOV/=<90> ;DPE9
; 1077 ;SET ARITHMETIC OVERFLOW
; 1078 SETFOV/=<91> ;SET FLOATING OVERFLOW
; 1079 SETNDV/=<92> ;SET NO DIVIDE
; 1080
; 1081 ;---------------------------------------------------------------------
; 1082
; 1083 CLRFPD/=<93> ;CLEAR FIRST PART DONE
; 1084 SETFPD/=<94> ;SET FIRST PART DONE
; 1085 HOLD USER/=<95> ;WHEN THIS BIT IS SET IT:
; 1086 ; 1. PREVENTS SETTING USER IOT IN USER MODE
; 1087 ; 2. PREVENTS CLEARING USER IN USER MODE
; 1088
; 1089 ;---------------------------------------------------------------------
; 1090
; 1091 ; <96> ;SPARE
; 1092 TRAP2/=<97> ;SET TRAP 2
; 1093 TRAP1/=<98> ;SET TRAP 1
; 1094
; 1095 ;---------------------------------------------------------------------
; 1096
; 1097 LD PCU/=<99> ;LOAD PCU FROM USER
; 1098 ; <100> ;SPARE
; 1099 ; <101> ;SPARE
; 1100
; 1101 ;---------------------------------------------------------------------
; 1102
; 1103 ; <102> ;SPARE
; 1104 ; <103> ;SPARE
; 1105 JFCLFLG/=<104> ;DO A JFCL INSTRUCTION
; 1106
; 1107 ;---------------------------------------------------------------------
; 1108
; 1109 LD FLAGS/=<105> ;LOAD FLAGS FROM DP
; 1110 ; <106>
; 1111 ADFLGS/=<107> ;UPDATE CARRY FLAGS
; 1112
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 29
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- NUMBER FIELD
; 1113 ;# REDEFINED WHEN USED AS MEMORY CYCLE CONTROL
; 1114
; 1115 FORCE USER/=<90> ;FORCE USER MODE REFERENCE
; 1116 FORCE EXEC/=<91> ;FORCE EXEC MODE REFERENCE
; 1117 ; (DOES NOT WORK UNDER PXCT)
; 1118 FETCH/=<92> ;THIS IS AN INSTRUCTION FETCH
; 1119
; 1120 ;---------------------------------------------------------------------
; 1121
; 1122 READ CYCLE/=<93> ;SELECT A READ CYCLE
; 1123 WRITE TEST/=<94> ;PAGE FAILE IF NOT WRITTEN
; 1124 WRITE CYCLE/=<95> ;SELECT A MEMORY WRITE CYCLE
; 1125
; 1126 ;---------------------------------------------------------------------
; 1127
; 1128 ; <96> ;SPARE BIT
; 1129 DONT CACHE/=<97> ;DO NOT LOOK IN CACHE
; 1130 PHYSICAL/=<98> ;DO NOT INVOKE PAGING HARDWARE
; 1131
; 1132 ;---------------------------------------------------------------------
; 1133
; 1134 PXCT/=<99:101> ;WHICH PXCT BITS TO LOOK AT
; 1135 CURRENT=0
; 1136 E1=1
; 1137 D1=3
; 1138 BIS-SRC-EA=4
; 1139 E2=5
; 1140 BIS-DST-EA=6
; 1141 D2=7
; 1142
; 1143 ;---------------------------------------------------------------------
; 1144
; 1145 AREAD/=<102> ;LET DROM SELECT SYSLE TYPE AND VMA LOAD
; 1146 DP FUNC/=<103> ;IGNORE # BITS 0-11 AND USE DP 0-13 INSTEAD
; 1147 ; DP9 MEANS "FORCE PREVIOUS"
; 1148 LDVMA/=<104> ;LOAD THE VMA
; 1149
; 1150 ;---------------------------------------------------------------------
; 1151
; 1152 EXT ADR/=<105> ;PUT VMA BITS 14-17 ONTO BUS
; 1153 WAIT/=<106> ;START A MEMORY OR I/O CYCLE
; 1154 BWRITE/=<107> ;START A MEMORY CYCLE IF DROM ASKS FOR IT
; 1155
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 30
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- NUMBER FIELD
; 1156 ;THESE BITS ARE USED ONLY TO SETUP DP FOR A DP FUNCTION
; 1157
; 1158 ; <99> ;PREVIOUS
; 1159 IO CYCLE/=<100> ;THIS IS AN I/O CYCLE
; 1160 WRU CYCLE/=<101> ;WHO ARE YOU CYCLE
; 1161
; 1162 ;---------------------------------------------------------------------
; 1163
; 1164 VECTOR CYCLE/=<102> ;READ INTERRUPT VECTOR
; 1165 IO BYTE/=<103> ;BYTE CYCLE
; 1166 ; <104>
; 1167
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 31
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- NUMBER FIELD
; 1168 ;# REDEFINED WHEN USED AS PI RIGHT BITS
; 1169 PI.ZER/=<90:92> ;ZEROS
; 1170 PI.IP1/=<93> ;PI 1 IN PROG
; 1171 PI.IP2/=<94>
; 1172 PI.IP3/=<95>
; 1173 PI.IP4/=<96>
; 1174 PI.IP5/=<97>
; 1175 PI.IP6/=<98>
; 1176 PI.IP7/=<99>
; 1177 PI.ON/=<100> ;SYSTEM IS ON
; 1178 PI.CO1/=<101> ;CHAN 1 IS ON
; 1179 PI.CO2/=<102>
; 1180 I.CO3/=<103>
; 1181 I.CO4/=<104>
; 1182 I.CO5/=<105>
; 1183 I.CO6/=<106>
; 1184 I.CO7/=<107>
; 1185
; 1186 ;# REDEFINED WHEN USED AS WRPI DATA
; 1187 PI.MBZ/=<90:93> ;MUST BE ZERO
; 1188 PI.DIR/=<94> ;DROP INTERRUPT REQUESTS
; 1189 PI.CLR/=<95> ;CLEAR SYSTEM
; 1190 PI.REQ/=<96> ;REQUEST INTERRUPT
; 1191 PI.TCN/=<97> ;TURN CHANNEL ON
; 1192 PI.TCF/=<98> ;TURN CHANNEL OFF
; 1193 PI.TSF/=<99> ;TURN SYSTEM OFF
; 1194 PI.TSN/=<100> ;TURN SYSTEM ON
; 1195 PI.SC1/=<101> ;SELECT CHANNEL 1
; 1196 PI.SC2/=<102>
; 1197 PI.SC3/=<103>
; 1198 PI.SC4/=<104>
; 1199 PI.SC5/=<105>
; 1200 PI.SC6/=<106>
; 1201 PI.SC7/=<107>
; 1202
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 32
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- NUMBER FIELD
; 1203 ;# REDEFINED WHEN USED AS AC CONTROL
; 1204
; 1205
; 1206 ;THIS FIELD CONTROLS THE INPUT TO A 74LS181 ON DPE6. THE NUMBER
; 1207 ; FIELD HAS THIS FORMAT IN <98:107>:
; 1208 ;
; 1209 ; !-----!-----!-----!-----!-----!-----!-----!-----!-----!-----!
; 1210 ; !CARRY! S8 ! S4 ! S2 ! S1 ! MODE! B8 ! B4 ! B2 ! B1 !
; 1211 ; ! IN ! FUNCTION ! ! DATA INPUTS !
; 1212 ; !-----!-----------------------!-----!-----------------------!
; 1213 ;
; 1214
; 1215 ACALU/=<98:103>
; 1216 B=25
; 1217 AC+N=62
; 1218 ACN/=<104:107>
; 1219 ;AC NAMES FOR STRING INSTRUCTIONS
; 1220 SRCLEN=0 ;SOURCE LENGTH
; 1221 SRCP=1 ;SOURCE POINTER
; 1222 DLEN=3 ;DEST LENGTH
; 1223 DSTP=4 ;DEST POINTER
; 1224 MARK=3 ;POINTER TO MARK
; 1225 BIN0=3 ;HIGH WORD OF BINARY
; 1226 BIN1=4 ;LOW WORD OF BINARY
; 1227
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 33
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- NUMBER FIELD
; 1228 ;# FIELD REDEFINED WHEN USE AS APRID DATA
; 1229 MICROCODE OPTIONS/=<90:98>
; 1230 ;100 - NON-STANDARD MICROCODE
; 1231 ;200 - NO CST AT ALL
; 1232 ;400 - INHIBIT CST UPDATE IS AVAILABLE
; 1233 ;040 - UBABLT INSTRUCTIONS ARE PRESENT
; 1234 ;020 - KI PAGING IS PRESENT
; 1235 ;010 - KL PAGING IS PRESENT
; 1236 MICROCODE OPTION(INHCST)/=<90>
;;1237 .IF/INHCST
;;1238 OPT=1
; 1239 .IFNOT/INHCST
; 1240 OPT=0
; 1241 .ENDIF/INHCST
; 1242 MICROCODE OPTION(NOCST)/=<91>
;;1243 .IF/NOCST
;;1244 OPT=1
; 1245 .IFNOT/NOCST
; 1246 OPT=0
; 1247 .ENDIF/NOCST
; 1248 MICROCODE OPTION(NONSTD)/=<92>
;;1249 .IF/NONSTD
;;1250 OPT=1
; 1251 .IFNOT/NONSTD
; 1252 OPT=0
; 1253 .ENDIF/NONSTD
; 1254 MICROCODE OPTION(UBABLT)/=<93>
;;1255 .IF/UBABLT
;;1256 OPT=1
; 1257 .IFNOT/UBABLT
; 1258 OPT=0
; 1259 .ENDIF/UBABLT
; 1260 MICROCODE OPTION(KIPAGE)/=<94>
; 1261 .IF/KIPAGE
; 1262 OPT=1
;;1263 .IFNOT/KIPAGE
;;1264 OPT=0
; 1265 .ENDIF/KIPAGE
; 1266 MICROCODE OPTION(KLPAGE)/=<95>
; 1267 .IF/KLPAGE
; 1268 OPT=1
;;1269 .IFNOT/KLPAGE
;;1270 OPT=0
; 1271 .ENDIF/KLPAGE
; 1272
; 1273 MICROCODE VERSION/=<99:107>
; 1274 UCV=130
; 1275
; 1276 MICROCODE RELEASE(MAJOR)/=<99:104>
; 1277 UCR=2 ;MAJOR VERSION NUMBER (1,2,3,....)
; 1278
; 1279 MICROCODE RELEASE(MINOR)/=<105:107>
; 1280 UCR=0 ;MINOR VERSION NUMBER (.1,.2,.3,...)
; 1281
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 34
; KS10.MIC[7,3] 14:54 7-JAN-1986 MICROCODE FIELDS -- NUMBER FIELD
; 1282 ;# FIELD REDEFINED WHEN USED AS A HALT CODE
; 1283
; 1284 HALT/=<90:107>
; 1285 ;CODES 0 TO 77 ARE "NORMAL" HALTS
; 1286 POWER=0 ;POWER UP
; 1287 HALT=1 ;HALT INSTRUCTION
; 1288 CSL=2 ;CONSOLE HALT
; 1289 ;CODES 100 TO 777 ARE SOFTWARE ERRORS
; 1290 IOPF=100 ;I/O PAGE FAIL
; 1291 ILLII=101 ;ILLEGAL INTERRUPT INSTRUCTION
; 1292 ILLINT=102 ;BAD POINTER TO UNIBUS INTERRUPT VECTOR
; 1293 ;CODES 1000 TO 1777 ARE HARDWARE ERRORS
; 1294 BW14=1000 ;ILLEGAL BWRITE FUNCTION (BAD DROM)
; 1295 NICOND 5=1004 ;ILLEGAL NICOND DISPATCH
; 1296 MULERR=1005 ;VALUE COMPUTED FOR 10**21 WAS WRONG
;;1297 .IFNOT/FULL
;;1298 PAGEF=1777 ;PAGE FAIL IN SMALL MICROCODE
; 1299 .ENDIF/FULL
; 1300
; 1301
; 1302
; 1303 ;# FIELD REDEFINED WHEN USED AS FLG BITS
; 1304
; 1305 FLG.W/=<94> ;W BIT FROM PAGE MAP
; 1306 FLG.PI/=<95> ;PI CYCLE
; 1307 FLG.C/=<96> ;CACHE BIT FROM PAGE MAP
; 1308 FLG.SN/=<97> ;SPECIAL NEGATE IN FDV & DFDV
; 1309
; 1310 ;RIGHT HALF OF FLG USED TO RECOVER FROM PAGE FAILS
; 1311
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 35
; KS10.MIC[7,3] 14:54 7-JAN-1986 DISPATCH ROM DEFINITIONS
; 1312 .TOC "DISPATCH ROM DEFINITIONS"
; 1313
; 1314 ;ALL ON DPEA
; 1315
; 1316 .DCODE
; 1317 A/=<2:5> ;OPERAND FETCH MODE
; 1318 READ=0 ;READ
; 1319 WRITE=1 ;WRITE
; 1320 DREAD=2 ;DOUBLE READ
; 1321 DBLAC=3 ;DOUBLE AC
; 1322 SHIFT=4 ;SIMPLE SHIFT
; 1323 DSHIFT=5 ;DOUBLE SHIFT
; 1324 FPI=6 ;FLOATING POINT IMMEDIATE
; 1325 FP=7 ;FLOATING POINT
; 1326 RD-PF=10 ;READ, THEN START PREFETCH
; 1327 DFP=11 ;DOUBLE FLOATING POINT
; 1328 IOT=12 ;CHECK FOR IO LEGAL THEN SAME AS I
; 1329
; 1330 B/=<8:11> ;STORE RESULTS AS
; 1331 SELF=4 ;SELF
; 1332 DBLAC=5 ;DOUBLE AC
; 1333 DBLB=6 ;DOUBLE BOTH
; 1334 AC=15 ;AC
; 1335 MEM=16 ;MEMORY
; 1336 BOTH=17 ;BOTH
; 1337
; 1338 ;B-FIELD WHEN USED IN FLOATING POINT OPERATIONS
; 1339 ROUND/=<8> ;ROUND THE RESULT
; 1340 MODE/=<9> ;SEPARATE ADD/SUB & MUL/DIV ETC.
; 1341 FL-B/=<10:11> ;STORE RESULTS AS
; 1342 AC=1 ;AC
; 1343 MEM=2 ;MEMORY
; 1344 BOTH=3 ;BOTH
; 1345
; 1346 J/=<12:23> ;DISPATCH ADDRESS (MUST BE 1400 TO 1777)
; 1347
; 1348 ACDISP/=<24> ;DISPATCH ON AC FIELD
; 1349 I/=<25> ;IMMEDIATE DISPATCH. DISP/AREAD DOES A DISP/DROM
; 1350 ; IF THIS BIT IS SET.
; 1351 READ/=<26> ;START A READ AT AREAD
; 1352 TEST/=<27> ;START A WRITE TEST AT AREAD
; 1353 COND FUNC/=<28> ;START A MEMORY CYCLE ON BWRITE
; 1354 VMA/=<29>D,1 ;LOAD THE VMA ON AREAD
; 1355 WRITE/=<30> ;START A WRITE ON AREAD
; 1356 .UCODE
; 1357
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 36
; KS10.MIC[7,3] 14:54 7-JAN-1986 HOW TO READ MACROS
; 1358 .TOC "HOW TO READ MACROS"
; 1359 ;
; 1360 ; 1.0 REGISTER TRANSFER MACROS
; 1361 ;
; 1362 ; MOST MACROS USED IN THE KS10 ARE USED TO OPERATE ON DATA IN (OR FROM/TO) 2901
; 1363 ; REGISTERS. THE NAMES OF THE 2901 REGISTERS ARE MACRO PARAMETERS AND ARE
; 1364 ; ENCLOSED IN []. A TYPICAL MACRO IS:
; 1365 ;
; 1366 ; [AR]_[AR]+[BR]
; 1367 ;
; 1368 ; THE SYMBOL _ IS PRONOUNCED "GETS". THE ABOVE MACRO WOULD BE READ "THE AR GETS
; 1369 ; THE AR PLUS THE BR".
; 1370 ;
; 1371 ; IF A MACRO DOES NOT HAVE A _ IN IT, THERE IS NO RESULT STORED. THUS, [AR]-[BR]
; 1372 ; JUST COMPARES THE AR AND THE BR AND ALLOWS FOR SKIPS ON THE VARIOUS ALU BITS.
; 1373 ;
; 1374 ;
; 1375 ;
; 1376 ; 1.1 SPECIAL SYMBOLS
; 1377 ;
; 1378 ; THERE ARE A BUNCH OF SYMBOLS USED IN THE MACROS WHICH ARE NOT 2901 REGISTERS.
; 1379 ; THEY ARE DEFINED HERE:
; 1380 ;
; 1381 ; 1. AC -- THE AC SELECTED BY THE CURRENT INSTRUCTION. SEE DPEA
; 1382 ;
; 1383 ; 2. AC[] -- AC+N. AC[1] IS AC+1, AC[2] IS AC+2, ETC.
; 1384 ;
; 1385 ; 3. APR -- THE APR FLAGS FROM DPMA
; 1386 ;
; 1387 ; 4. EA -- THE EFFECTIVE ADDRESS. THAT IS, 0 IN THE LEFT HALF AND THE
; 1388 ; CONTENTS OF THE HR IN THE RIGHT HALF.
; 1389 ;
; 1390 ; 5. EXP -- THE F.P. EXPONENT FROM THE SCAD. [AR]_EXP WILL TAKE THE
; 1391 ; EXPONENT OUT OF THE FE AND PUT IT BACK INTO THE NUMBER IN THE AR.
; 1392 ;
; 1393 ; 6. FE -- THE FE REGISTER
; 1394 ;
; 1395 ; 7. FLAGS -- THE PC FLAGS (FROM DPE9) IN THE LEFT HALF.
; 1396 ;
; 1397 ; 8. Q -- THE Q REGISTER
; 1398 ;
; 1399 ; 9. RAM -- THE RAM FILE, RAM ADDRESS IS IN THE VMA.
; 1400 ;
; 1401 ; 10. P -- THE P FIELD OF THE BYTE POINTER. SAME IDEA AS EXP.
; 1402 ;
; 1403 ; 11. TIME -- THE 1MS. TIMER
; 1404 ;
; 1405 ; 12. VMA -- THE VMA. WHEN READ IT INCLUDES THE VMA FLAGS
; 1406 ;
; 1407 ; 13. XR -- INDEX REGISTER
; 1408
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 37
; KS10.MIC[7,3] 14:54 7-JAN-1986 HOW TO READ MACROS
; 1409 ; 14. XWD -- HALF WORD. USED TO GENERATE CONSTANTS. FOR EXAMPLE, [AR]_0 XWD
; 1410 ; [40] WOULD LOAD THE CONSTANT 40 (OCTAL) INTO THE AR.
; 1411 ;
; 1412 ; 15. +SIGN AND -SIGN -- SIGN BITS USED TO SIGN SMEAR F.P. NUMBERS. FOR
; 1413 ; EXAMPLE, [AR]_+SIGN WOULD CLEAR AR BITS 0 TO 8.
; 1414 ;
; 1415 ; 16. WORK[] -- LOCATIONS IN THE WORKSPACE USED AS SCRATCH SPACE. FOR
; 1416 ; EXAMPLE, [AR]_WORK[CSTM] WOULD LOAD THE AR WITH THE CST MASK FROM THE
; 1417 ; RAM. CSTM IS A SYMBOL DEFINED IN THE WORK FIELD.
; 1418 ;
; 1419 ;
; 1420 ;
; 1421 ;
; 1422 ; 1.2 LONG
; 1423 ;
; 1424 ; LONG IS USED ON SHIFT OPERATIONS TO INDICATE THAT THE Q REGISTER IS ALSO
; 1425 ; SHIFTED. THIS SAYS NOTHING ABOUT HOW THE SHIFT PATHS ARE CONNECTED UP.
; 1426 ;
; 1427 ;
; 1428 ;
; 1429 ; 2.0 MEMORY MACROS
; 1430 ;
; 1431 ; MEMORY IS INDICATED BY THE SYMBOL "MEM". WHEN WE ARE WAITING FOR DATA FROM
; 1432 ; MEMORY THE "MEM READ" MACRO IS USED. WHEN WE ARE SENDING DATA TO MEMORY, THE
; 1433 ; "MEM WRITE" MACRO IS USED. EXAMPLE,
; 1434 ; MEM READ, ;WAIT FOR MEMORY
; 1435 ; [AR]_MEM ;LOAD DATA INTO AR
; 1436 ; VMA_ IS USED THE LOAD THE VMA. THUS, VMA_[PC] LOADS THE VMA FROM THE PC.
; 1437 ;
; 1438 ;
; 1439 ;
; 1440 ; 3.0 TIME CONTROL
; 1441 ;
; 1442 ; THERE ARE 2 SETS OF MACROS USED FOR TIME CONTROL. THE FIRST, SELECTS THE RAM
; 1443 ; ADDRESS TO SPEED UP THE NEXT INSTRUCTION. THESE MACROS ARE AC, AC[], XR, VMA,
; 1444 ; WORK[]. THE SECOND, SETS THE TIME FIELD. THESE ARE 2T, 3T, 4T, AND 5T TO
; 1445 ; SELECT 2, 3, 4, OR 5 TICKS.
; 1446 ;
; 1447 ;
; 1448 ;
; 1449 ; 4.0 SCAD MACROS
; 1450 ;
; 1451 ; THE SCAD MACROS LOOK LIKE THE 2901 MACROS EXECPT NO [] ARE REQUIRED. THERE ARE
; 1452 ; ONLY A FEW SYMBOLS USED.
; 1453 ;
; 1454 ; 1. FE -- THE FE REGISTER
; 1455 ;
; 1456 ; 2. SC -- THE SC REGISTER
; 1457
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 38
; KS10.MIC[7,3] 14:54 7-JAN-1986 HOW TO READ MACROS
; 1458 ; 3. EXP -- THE EXPONENT FROM A F.P. NUMBER. FOR EXAMPLE FE_EXP LOADS THE
; 1459 ; FE FROM DP BITS 1-8.
; 1460 ;
; 1461 ; 4. SHIFT -- THE SHIFT COUNT FROM SHIFT INSTRUCTIONS. THAT IS DP BITS 18
; 1462 ; AND 28-35.
; 1463 ;
; 1464 ; 5. S# -- THE SMALL NUMBER. THE 10 BIT MAGIC NUMBER INPUT TO THE SCADA
; 1465 ; MIXER.
; 1466 ;
; 1467 ;
; 1468 ;
; 1469 ;
; 1470 ; 5.0 CONTROL MACROS
; 1471 ;
; 1472 ; ALL CONTROL MACROS LOOK LIKE ENGLISH COMMANDS. SOME EXAMPLES,
; 1473 ; HOLD LEFT ;DO NOT CLOCK LEFT HALF OF DP
; 1474 ; SET APR ENABLES ;LOAD APR ENABLES FROM DP
; 1475 ; SET NO DIVIDE ;SET NO DIVIDE PC FLAG
; 1476 ;
; 1477 ;
; 1478 ;
; 1479 ; 6.0 SKIPS
; 1480 ;
; 1481 ; ALL SKIPS CAUSE THE NEXT MICRO INSTRUCTION TO COME FROM THE ODD WORD OF AN
; 1482 ; EVEN/ODD PAIR. THE MACROS HAVE THE FORMAT OF SKIP COND. THEY SKIP IF CONDITION
; 1483 ; IS TRUE. SOME EXAMPLES,
; 1484 ; SKIP AD.EQ.0 ;SKIP IF ADDER OUTPUT IS ZERO
; 1485 ; SKIP IRPT ;SKIP IF INTERRUPT IS PENDING
; 1486 ;
; 1487 ;
; 1488 ;
; 1489 ; 7.0 DISPATCH MACROS
; 1490 ;
; 1491 ; DISPATCH MACROS CAUSE THE MACHINE TO GO TO ONE OF MANY PLACES. IN MOST CASES
; 1492 ; THEY HAVE THE WORD "DISP" IN THE NAME OF THE MACRO. FOR EXAMPLE, MUL DISP, BYTE
; 1493 ; DISP.
; 1494 ;
; 1495 ;
; 1496 ;
; 1497 ; 8.0 SUPER MACROS
; 1498 ;
; 1499 ; THERE ARE PLACES WHERE ONE MICRO INSTRUCTION IS USED IN MANY PLACES. FOR
; 1500 ; EXAMPLE, MANY PLACES DETECT ILLEGAL OPERATIONS AND WANT TO GENERATE A TRAP TO
; 1501 ; THE MONITOR. WE COULD WRITE
; 1502 ; J/UUO
; 1503 ; BUT THIS WASTES A MICRO STEP DOING A USELESS JUMP. INSTEAD WE WRITE,
; 1504 ; UUO
; 1505 ; THIS MACRO IS THE FIRST STEP OF THE UUO ROUTINE AND JUMPS TO THE SECOND
; 1506 ; INSTRUCTION. WE WRITE THE EXPANSION OF THE UUO MACRO AS THE FIRST INSTRUCTION
; 1507 ; OF THE UUO ROUTINE SO THAT THE READER CAN SEE WHAT IT DOES. SOME EXAMPLES OF
; 1508
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 39
; KS10.MIC[7,3] 14:54 7-JAN-1986 HOW TO READ MACROS
; 1509 ; SUPER MACROS ARE:
; 1510 ; PAGE FAIL TRAP ;GENERATE A PAGE FAIL TRAP
; 1511 ; DONE ;THIS INSTRUCTION IS NOW COMPLETE
; 1512 ; ; USED WITH A SKIP OR DISP WHERE
; 1513 ; ; SOME PATHS ARE NOP'S
; 1514 ; HALT [] ;JUMP TO HALT LOOP. ARGUMENT IS A
; 1515 ; ; CODE
; 1516
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 40
; KS10.MIC[7,3] 14:54 7-JAN-1986 MACROS -- DATA PATH CHIP -- GENERAL
; 1517 .TOC "MACROS -- DATA PATH CHIP -- GENERAL"
; 1518
; 1519 .NOT.[] "AD/.NOT.A,A/@1"
; 1520 []+[] "AD/A+B,A/@1,B/@2"
; 1521 []-[] "AD/A-B-.25,A/@1,B/@2,ADD .25"
; 1522 []-# "AD/A-D-.25,DBUS/DBM,DBM/#,A/@1,ADD .25"
; 1523 [].AND.# "AD/D.AND.A,DBUS/DBM,DBM/#,A/@1"
; 1524 [].AND.Q "AD/A.AND.Q,A/@1,DEST/PASS"
; 1525 [].AND.[] "AD/A.AND.B,A/@2,B/@1,DEST/PASS"
; 1526 [].AND.NOT.[] "AD/.NOT.A.AND.B,A/@2,B/@1,DEST/PASS"
; 1527 [].OR.[] "AD/A.OR.B,A/@2,B/@1,DEST/PASS"
; 1528 [].XOR.# "AD/D.XOR.A,DBUS/DBM,DBM/#,A/@1"
; 1529 [].XOR.[] "AD/A.XOR.B,A/@2,B/@1,DEST/PASS"
; 1530 []_#-[] "AD/D-A-.25,DEST/AD,A/@2,B/@1,DBUS/DBM,DBM/#,ADD .25"
; 1531 []_# "AD/D,DBUS/DBM,DBM/#,DEST/AD,B/@1"
; 1532 []_-1 "AD/-A-.25,A/ONE,DEST/AD,B/@1,ADD .25"
; 1533 []_-2 "AD/-A-.25,DEST/AD*2,A/ONE,B/@1,ADD .25"
; 1534 []_-Q "AD/-Q-.25,DEST/AD,B/@1,ADD .25"
; 1535 []_-Q*2 "AD/-Q-.25,DEST/AD*2,B/@1,ADD .25"
; 1536 []_-Q*.5 "AD/-Q-.25,DEST/AD*.5,B/@1,ADD .25"
; 1537 []_-[] "AD/-A-.25,A/@2,DEST/AD,B/@1,ADD .25"
; 1538 []_-[]-.25 "AD/-A-.25,A/@2,DEST/AD,B/@1"
; 1539 []_-[]*2 "AD/-A-.25,A/@2,DEST/AD*2,B/@1,ADD .25"
; 1540 []_.NOT.AC "AD/.NOT.D,DBUS/RAM,RAMADR/AC#,DEST/AD,B/@1"
; 1541 []_.NOT.AC[] "AD/.NOT.D,DBUS/RAM,RAMADR/AC*#,ACALU/AC+N,ACN/@2,DEST/AD,B/@1,DT/3T"
; 1542 []_.NOT.Q "AD/.NOT.Q,DEST/AD,B/@1"
; 1543 []_.NOT.[] "AD/.NOT.A,A/@2,DEST/AD,B/@1"
; 1544 []_0 "AD/ZERO,DEST/AD,B/@1"
; 1545 []_0*.5 LONG "AD/ZERO,DEST/Q_Q*.5,B/@1"
; 1546 []_0 XWD [] "AD/47,DEST/AD,B/@1,DBM/#,DBUS/DBM,#/@2,RSRC/DA,A/MASK"
; 1547 []_AC "AD/D,DBUS/RAM,RAMADR/AC#,DEST/AD,B/@1,AD PARITY"
; 1548 []_-AC "AD/-D-.25,DBUS/RAM,RAMADR/AC#,DEST/AD,B/@1,ADD .25"
; 1549 []_-AC[] "AD/-D-.25,DBUS/RAM,RAMADR/AC*#,ACALU/AC+N,ACN/@2,DEST/AD,B/@1,ADD .25,DT/3T"
; 1550 []_AC*.5 "AD/D,DBUS/RAM,RAMADR/AC#,DEST/AD*.5,B/@1,DT/3T"
; 1551 []_AC*.5 LONG "AD/D,DBUS/RAM,RAMADR/AC#,DEST/Q_Q*.5,B/@1,DT/3T"
; 1552 []_AC*2 "AD/D,DBUS/RAM,RAMADR/AC#,DEST/AD*2,B/@1,DT/3T"
; 1553 []_AC+1 "AD/D+A,DBUS/RAM,RAMADR/AC#,A/ONE,DEST/AD,B/@1"
; 1554 []_AC+1000001 "AD/D+A,DBUS/RAM,RAMADR/AC#,A/XWD1,DEST/AD,B/@1"
; 1555 []_AC+[] "AD/D+A,A/@2,DBUS/RAM,RAMADR/AC#,DEST/AD,B/@1,DT/3T"
; 1556 []_AC-1 "AD/D-A-.25,DBUS/RAM,RAMADR/AC#,A/ONE,DEST/AD,B/@1,ADD .25"
; 1557 []_AC-[] "AD/D-A-.25,A/@2,DBUS/RAM,RAMADR/AC#,DEST/AD,B/@1,ADD .25"
; 1558 []_AC-[]-.25 "AD/D-A-.25,A/@2,DBUS/RAM,RAMADR/AC#,DEST/AD,B/@1"
; 1559 []_AC[]-[] "AD/D-A-.25,A/@3,DBUS/RAM,RAMADR/AC*#,ACALU/AC+N,ACN/@2,DEST/AD,B/@1,ADD .25,DT/3T"
; 1560 []_AC[]-1 "AD/D-A-.25,A/ONE,DBUS/RAM,RAMADR/AC*#,ACALU/AC+N,ACN/@2,DEST/AD,B/@1,ADD .25,DT/3T"
; 1561 []_AC[].AND.[] "AD/D.AND.A,A/@3,DBUS/RAM,RAMADR/AC*#,ACALU/AC+N,ACN/@2,DEST/AD,B/@1,DT/3T"
; 1562 []_AC.AND.MASK "AD/D.AND.A,A/MASK,DBUS/RAM,RAMADR/AC#,DEST/AD,B/@1,AD PARITY"
; 1563 []_AC[] "AD/D,DBUS/RAM,RAMADR/AC*#,ACALU/AC+N,ACN/@2,DEST/AD,B/@1,AD PARITY,DT/3T"
; 1564 []_AC[]*2 "AD/D,DBUS/RAM,RAMADR/AC*#,ACALU/AC+N,ACN/@2,DEST/AD*2,B/@1,AD PARITY,DT/3T"
; 1565 []_AC[]*.5 "AD/D,DBUS/RAM,RAMADR/AC*#,ACALU/AC+N,ACN/@2,DEST/AD*.5,B/@1,AD PARITY,DT/3T"
; 1566 []_APR "AD/D,DBUS/DBM,DBM/APR FLAGS,DEST/AD,B/@1,DT/3T"
; 1567 []_CURRENT AC [] "AD/D,DBUS/RAM,RAMADR/#,ACALU/B,ACN/@2,DEST/AD,B/@1,AD PARITY,DT/3T"
; 1568 []_EA FROM [] "AD/57,RSRC/0A,A/@2,DEST/AD,B/@1"
; 1569
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 41
; KS10.MIC[7,3] 14:54 7-JAN-1986 MACROS -- DATA PATH CHIP -- GENERAL
; 1570 []_EA "AD/57,RSRC/0A,A/HR,DEST/AD,B/@1"
; 1571 []_EXP "AD/D,DBUS/DBM,DBM/EXP,A/@1,B/@1,DEST/A,SCAD/A+B,SCADA/S#,S#/0,SCADB/FE,HOLD RIGHT,EXP TEST"
; 1572 []_FE "AD/D,DEST/AD*.5,B/@1,DBUS/DBM,DBM/DP,SCAD/A+B,SCADA/S#,S#/0,SCADB/FE,BYTE/BYTE5"
; 1573 []_FLAGS "AD/D.AND.A,DBUS/PC FLAGS,A/MASK,DEST/AD,B/@1,RSRC/0Q"
; 1574 []_P "AD/D,DEST/A,A/@1,B/@1,DBUS/DBM,DBM/DP,BYTE/BYTE1,SCAD/A+B,SCADA/S#,S#/0,SCADB/FE"
; 1575 []_PC WITH FLAGS "AD/D,DBUS/PC FLAGS,RSRC/0A,A/PC,DEST/AD,B/@1"
; 1576 []_Q "AD/Q,DEST/AD,B/@1"
; 1577 []_Q*.5 "AD/Q,DEST/AD*.5,B/@1"
; 1578 []_Q*2 "AD/Q,DEST/AD*2,B/@1"
; 1579 []_Q*2 LONG "AD/Q,DEST/Q_Q*2,B/@1"
; 1580 []_Q+1 "AD/A+Q,A/ONE,DEST/AD,B/@1"
; 1581 []_RAM "AD/D,DBUS/RAM,RAMADR/RAM,DEST/AD,B/@1,AD PARITY"
; 1582 []_TIME "AD/44,RSRC/DA,A/MASK,DBUS/DBM,DBM/EXP,DEST/AD,B/@1"
; 1583 []_VMA "AD/D,DEST/AD,B/@1,DBUS/DBM,DBM/VMA"
; 1584 []_XR "AD/D,DBUS/RAM,RAMADR/XR#,DEST/AD,B/@1"
; 1585 []_[] "AD/A,A/@2,DEST/AD,B/@1"
; 1586 []_[] SWAP "AD/D,DBUS/DBM,DBM/DP SWAP,DEST/A,A/@2,B/@1"
; 1587 []_[] XWD 0 "AD/45,DEST/AD,B/@1,DBM/#,DBUS/DBM,#/@2,RSRC/D0,A/MASK"
; 1588 []_[]*.5 "AD/A,A/@2,DEST/AD*.5,B/@1"
; 1589 []_[]*.5 LONG "AD/A,A/@2,DEST/Q_Q*.5,B/@1"
; 1590 []_[]*2 "AD/A,A/@2,DEST/AD*2,B/@1"
; 1591 []_[]*2 LONG "AD/A,A/@2,DEST/Q_Q*2,B/@1"
; 1592 []_[]*4 "AD/A+B,A/@2,B/@1,DEST/AD*2"
; 1593 []_[]+# "AD/D+A,DBUS/DBM,DBM/#,A/@2,DEST/AD,B/@1"
; 1594 []_[]+.25 "AD/0+A,A/@2,DEST/AD,B/@1, ADD .25"
; 1595 []_[]+0 "AD/0+A,A/@2,DEST/AD,B/@1"
; 1596 []_[]+1 "AD/A+B,A/ONE,B/@1,B/@2,DEST/AD"
; 1597 []_[]+1000001 "AD/D+A,A/@2,DBUS/DBM,DBM/#,#/1,DEST/AD,B/@1"
; 1598 []_[]+AC "AD/D+A,A/@2,DBUS/RAM,RAMADR/AC#,DEST/AD,B/@1"
; 1599 []_[]+AC[] "AD/D+A,A/@2,DBUS/RAM,RAMADR/AC*#,ACALU/AC+N,ACN/@3,DEST/AD,B/@1,DT/3T"
; 1600 []_[]+Q "AD/A+Q,A/@2,DEST/AD,B/@1"
; 1601 []_[]+RAM "AD/D+A,A/@2,DBUS/RAM,RAMADR/RAM,DEST/AD,B/@1"
; 1602 []_[]+XR "AD/D+A,DBUS/RAM,RAMADR/XR#,A/@2,DEST/AD,B/@1,HOLD LEFT"
; 1603 []_[]+[] "AD/A+B,A/@3,B/@1,B/@2,DEST/AD"
; 1604 []_[]+[]+.25 "AD/A+B,A/@3,B/@1,B/@2,DEST/AD, ADD .25"
; 1605 []_[]-# "AD/A-D-.25,DBUS/DBM,DBM/#,A/@2,DEST/AD,B/@1, ADD .25"
; 1606 []_[]-1 "AD/B-A-.25,B/@1,A/ONE,DEST/AD,ADD .25"
; 1607 []_[]-1000001 "AD/A-D-.25,A/@2,DBUS/DBM,DBM/#,#/1,DEST/AD,B/@1,ADD .25"
; 1608 []_[]-AC "AD/A-D-.25,A/@2,DBUS/RAM,RAMADR/AC#,DEST/AD,B/@1,ADD .25"
; 1609 []_[]-RAM "AD/A-D-.25,A/@2,DBUS/RAM,RAMADR/RAM,DEST/AD,B/@1,ADD .25"
; 1610 []_[]-[] "AD/B-A-.25,B/@1,B/@2,A/@3,DEST/AD,ADD .25"
; 1611 []_[]-[] REV "AD/A-B-.25,B/@1,B/@3,A/@2,DEST/AD,ADD .25"
; 1612 []_[].AND.# "AD/D.AND.A,DBUS/DBM,DBM/#,DEST/AD,A/@2,B/@1"
; 1613 []_[].AND.# CLR LH "AD/ZERO,RSRC/DA,DBUS/DBM,DBM/#,DEST/AD,A/@2,B/@1"
; 1614 []_[].AND.# CLR RH "AD/D.AND.A,RSRC/0Q,DBUS/DBM,DBM/#,DEST/AD,A/@2,B/@1"
; 1615 []_(AC[].AND.[])*.5 "AD/D.AND.A,DEST/AD*.5,A/@3,B/@1,RAMADR/AC*#,DBUS/RAM,ACALU/AC+N,ACN/@2"
; 1616 []_(Q+1)*.5 "AD/A+Q,A/ONE,DEST/AD*.5,B/@1"
; 1617 []_(#-[])*2 "AD/D-A-.25,DEST/AD*2,A/@2,B/@1,DBUS/DBM,DBM/#,ADD .25"
; 1618 []_(-[])*.5 "AD/-A-.25,A/@2,DEST/AD*.5,B/@1,ADD .25"
; 1619 []_(-[]-.25)*.5 LONG "AD/-A-.25,A/@2,DEST/Q_Q*.5,B/@1"
; 1620 []_(-[]-.25)*2 LONG "AD/-A-.25,A/@2,DEST/Q_Q*2,B/@1"
; 1621
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 42
; KS10.MIC[7,3] 14:54 7-JAN-1986 MACROS -- DATA PATH CHIP -- GENERAL
; 1622 []_([].AND.#)*.5 "AD/D.AND.A,DBUS/DBM,DBM/#,DEST/AD*.5,A/@2,B/@1"
; 1623 []_([].AND.#)*2 "AD/D.AND.A,DBUS/DBM,DBM/#,DEST/AD*2,A/@2,B/@1"
; 1624 []_([].AND.NOT.#)*.5 "AD/.NOT.D.AND.A,DBUS/DBM,DBM/#,DEST/AD*.5,A/@2,B/@1"
; 1625 []_([].AND.NOT.#)*2 "AD/.NOT.D.AND.A,DBUS/DBM,DBM/#,DEST/AD*2,A/@2,B/@1"
; 1626 []_([].AND.[])*.5 "AD/A.AND.B,DEST/AD*.5,A/@3,B/@1,B/@2"
; 1627 []_([].AND.[])*2 "AD/A.AND.B,DEST/AD*2,A/@3,B/@1,B/@2"
; 1628 []_([].OR.#)*.5 "AD/D.OR.A,DBUS/DBM,DBM/#,DEST/AD*.5,A/@2,B/@1"
; 1629 []_([].OR.#)*2 "AD/D.OR.A,DBUS/DBM,DBM/#,DEST/AD*2,A/@2,B/@1"
; 1630 []_([]+#)*2 "AD/D+A,DBUS/DBM,DBM/#,DEST/AD*2,A/@2,B/@1"
; 1631 []_([]+1)*2 "AD/A+B,A/ONE,B/@1,B/@2,DEST/AD*2"
; 1632 []_([]+[])*.5 LONG "AD/A+B,A/@3,B/@1,B/@2,DEST/Q_Q*.5"
; 1633 []_([]+[])*2 LONG "AD/A+B,A/@3,B/@1,B/@2,DEST/Q_Q*2"
; 1634 []_([]-[])*.5 LONG "AD/B-A-.25,A/@3,B/@1,B/@2,DEST/Q_Q*.5, ADD .25"
; 1635 []_([]-[])*2 LONG "AD/B-A-.25,A/@3,B/@1,B/@2,DEST/Q_Q*2, ADD .25"
; 1636 []_([]+[]+.25)*.5 LONG "AD/A+B,A/@3,B/@1,B/@2,DEST/Q_Q*.5, ADD .25"
; 1637 []_[].AND.AC "AD/D.AND.A,DBUS/RAM,RAMADR/AC#,A/@2,DEST/AD,B/@1"
; 1638 []_[].AND.NOT.# "AD/.NOT.D.AND.A,DBUS/DBM,DBM/#,A/@2,DEST/AD,B/@1"
; 1639 []_[].AND.NOT.[] "AD/.NOT.A.AND.B,DEST/AD,B/@1,B/@2,A/@3"
; 1640 []_[].AND.NOT.AC "AD/.NOT.D.AND.A,DBUS/RAM,RAMADR/AC#,A/@2,DEST/AD,B/@1"
; 1641 []_[].AND.Q "AD/A.AND.Q,A/@2,DEST/AD,B/@1"
; 1642 []_[].AND.[] "AD/A.AND.B,A/@3,B/@1,B/@2,DEST/AD"
; 1643 []_[].EQV.AC "AD/D.EQV.A,DBUS/RAM,RAMADR/AC#,A/@2,DEST/AD,B/@1"
; 1644 []_[].EQV.Q "AD/A.EQV.Q,A/@2,DEST/AD,B/@1"
; 1645 []_[].OR.# "AD/D.OR.A,DBUS/DBM,DBM/#,A/@2,DEST/AD,B/@1"
; 1646 []_[].OR.AC "AD/D.OR.A,DBUS/RAM,RAMADR/AC#,A/@2,DEST/AD,B/@1"
; 1647 []_[].OR.FLAGS "AD/D.OR.A,DBUS/PC FLAGS,RSRC/0A,A/@1,DEST/AD,B/@1"
; 1648 []_[].OR.[] "AD/A.OR.B,A/@3,B/@2,B/@1,DEST/AD"
; 1649 []_[].XOR.# "AD/D.XOR.A,DBUS/DBM,DBM/#,DEST/AD,A/@2,B/@1"
; 1650 []_[].XOR.AC "AD/D.XOR.A,DBUS/RAM,RAMADR/AC#,A/@1,DEST/AD,B/@2"
; 1651 []_[].XOR.[] "AD/A.XOR.B,A/@3,B/@1,B/@2,DEST/AD"
; 1652
; 1653 [] LEFT_0 "AD/57,RSRC/0B,DEST/AD,B/@1"
; 1654 [] RIGHT_0 "AD/53,RSRC/D0,DEST/AD,B/@1"
; 1655 [] LEFT_-1 "AD/54,RSRC/0B,DEST/AD,A/MASK,B/@1"
; 1656 [] RIGHT_-1 "AD/53,RSRC/0A,DEST/AD,A/MASK,B/@1"
; 1657
; 1658
; 1659 []_+SIGN "[@1]_[@1].AND.#, #/777, HOLD RIGHT"
; 1660 []_-SIGN "[@1]_[@1].OR.#, #/777000, HOLD RIGHT"
; 1661 ;THE FOLLOWING 2 MACROS ARE USED IN DOUBLE FLOATING STUFF
; 1662 ; THEY ASSUME THAT THE OPERAND HAS BEEN SHIFTED RIGHT 1 PLACE.
; 1663 ; THEY SHIFT 1 MORE PLACE
; 1664 []_+SIGN*.5 "AD/.NOT.D.AND.A,A/@1,B/@1,DEST/AD*.5,DBUS/DBM,DBM/#,#/777400,RSRC/0A"
; 1665 []_-SIGN*.5 "AD/D.OR.A,A/@1,B/@1,DEST/AD*.5,DBUS/DBM,DBM/#,#/777400,RSRC/0A"
; 1666
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 43
; KS10.MIC[7,3] 14:54 7-JAN-1986 MACROS -- DATA PATH CHIP -- Q
; 1667 .TOC "MACROS -- DATA PATH CHIP -- Q"
; 1668
; 1669 Q-[] "AD/Q-A-.25,A/@1,ADD .25"
; 1670 Q.AND.NOT.[] "AD/.NOT.A.AND.Q,A/@1,DEST/PASS"
; 1671 Q_[] "AD/A,DEST/Q_AD,A/@1"
; 1672 Q_[]-[] "AD/A-B-.25,A/@1,B/@2,DEST/Q_AD,ADD .25"
; 1673 Q_[]+[] "AD/A+B,A/@1,B/@2,DEST/Q_AD"
; 1674 Q_[].AND.[] "AD/A.AND.B,A/@1,B/@2,DEST/Q_AD"
; 1675 Q_.NOT.AC[] "AD/.NOT.D,DBUS/RAM,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DEST/Q_AD,DT/3T"
; 1676 Q_-[] "AD/-A-.25,DEST/Q_AD,A/@1, ADD .25"
; 1677 Q_-1 "Q_-[ONE]"
; 1678 Q_-AC[] "AD/-D-.25,DBUS/RAM,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DEST/Q_AD,ADD .25,DT/3T"
; 1679 Q_-Q "AD/-Q-.25,ADD .25,DEST/Q_AD"
; 1680 Q_AC "AD/D,DBUS/RAM,RAMADR/AC#,DEST/Q_AD,CHK PARITY"
; 1681 Q_AC[] "AD/D,DBUS/RAM,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DEST/Q_AD,CHK PARITY,DT/3T"
; 1682 Q_AC[].AND.MASK "AD/D.AND.A,A/MASK,DBUS/RAM,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DEST/Q_AD,CHK PARITY,DT/3T"
; 1683 Q_AC[].AND.[] "AD/D.AND.A,A/@2,DBUS/RAM,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DEST/Q_AD,CHK PARITY,DT/3T"
; 1684 Q_.NOT.Q "AD/.NOT.Q,DEST/Q_AD"
; 1685 Q_# "AD/D,DBUS/DBM,DBM/#,DEST/Q_AD"
; 1686 Q_0 "AD/ZERO,DEST/Q_AD"
; 1687 Q_0 XWD [] "AD/47,DEST/Q_AD,DBM/#,DBUS/DBM,#/@1,RSRC/DA,A/MASK"
; 1688 Q_Q+.25 "AD/0+Q,DEST/Q_AD,ADD .25"
; 1689 Q_Q+1 "AD/A+Q,A/ONE,DEST/Q_AD"
; 1690 Q_Q-1 "AD/Q-A-.25,A/ONE,DEST/Q_AD, ADD .25"
; 1691 Q_Q+AC "AD/D+Q,DBUS/RAM,RAMADR/AC#,DEST/Q_AD"
; 1692 Q_Q*.5 "[MAG]_[MASK]*.5 LONG, SHSTYLE/NORM"
; 1693 Q_Q*2 "[MASK]_[MAG]*2 LONG, SHSTYLE/NORM"
; 1694 Q_Q.OR.# "AD/D.OR.Q,DBUS/DBM,DBM/#,DEST/Q_AD"
; 1695 Q_Q.AND.# "AD/D.AND.Q,DBUS/DBM,DBM/#,DEST/Q_AD"
; 1696 Q_Q.AND.[] "AD/A.AND.Q,A/@1,DEST/Q_AD"
; 1697 Q_Q.AND.NOT.[] "AD/.NOT.A.AND.Q,A/@1,DEST/Q_AD"
; 1698 Q_Q+[] "AD/A+Q,A/@1,DEST/Q_AD"
; 1699 Q_[].AND.Q "AD/A.AND.Q,A/@1,DEST/Q_AD"
; 1700 Q_[].OR.Q "AD/A.OR.Q,A/@1,DEST/Q_AD"
; 1701
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 44
; KS10.MIC[7,3] 14:54 7-JAN-1986 MACROS -- DATA PATH CHIP -- MISC.
; 1702 .TOC "MACROS -- DATA PATH CHIP -- MISC."
; 1703
; 1704 CLEAR []0 "AD/D.AND.A,A/@1,DBUS/DBM,DBM/#,#/377777,DEST/AD,B/@1,HOLD RIGHT"
; 1705 CLEAR ARX0 "CLEAR [ARX]0"
; 1706
; 1707 ;CYCLE CHIP REGISTERS THRU AD SO WE CAN TEST BITS
; 1708 READ XR "AD/D,DBUS/RAM,RAMADR/XR#"
; 1709 READ [] "AD/B,B/@1"
; 1710 READ Q "AD/Q"
; 1711
; 1712 ;TEST BITS IN REGISTERS (SKIP IF ZERO)
; 1713 TR [] "AD/D.AND.A,DBUS/DBM,DBM/#,A/@1,SKIP ADR.EQ.0,DT/3T"
; 1714 TL [] "AD/D.AND.A,DBUS/DBM,DBM/#,A/@1,SKIP ADL.EQ.0,DT/3T"
; 1715
; 1716
; 1717 ;CAUSE BITS -2 AND -1 TO MATCH BIT 0.
; 1718 FIX [] SIGN "AD/D,DEST/A,A/@1,B/@1,DBUS/DP,HOLD RIGHT"
; 1719
; 1720 ;GENERATE A MASK IN Q AND ZERO A 2901 REGISTER
; 1721 GEN MSK [] "AD/ZERO,DEST/Q_Q*2,B/@1,ONES"
; 1722
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 45
; KS10.MIC[7,3] 14:54 7-JAN-1986 MACROS -- STORE IN AC
; 1723 .TOC "MACROS -- STORE IN AC"
; 1724
; 1725 FM WRITE "FMWRITE/1"
; 1726
; 1727 AC[]_[] VIA AD "AD/B,DEST/PASS,B/@2,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DBUS/DP,FM WRITE,CHK PARITY"
; 1728 AC_[] VIA AD "AD/B,DEST/PASS,B/@1,RAMADR/AC#,DBUS/DP,FM WRITE,CHK PARITY"
; 1729 AC[]_[] "AD/A,DEST/A,B/@2,A/@2,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DBUS/DP, FM WRITE"
; 1730 AC[]_[] TEST "AD/D,DBUS/DP,DEST/A,B/@2,A/@2,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DBUS/DP, FM WRITE"
; 1731 AC[]_[]+1 "AD/A+B,DEST/PASS,A/ONE,B/@2,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DBUS/DP,FM WRITE"
; 1732 AC[]_[]*2 "AD/A+B,DEST/PASS,A/@2,B/@2,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DBUS/DP,FM WRITE"
; 1733 AC_[] "AD/A,DEST/A,B/@1,A/@1,RAMADR/AC#,DBUS/DP, FM WRITE"
; 1734 AC_[] TEST "AD/D,DBUS/DP,DEST/A,B/@1,A/@1,RAMADR/AC#,DBUS/DP, FM WRITE"
; 1735 AC_[]+1 "AD/A+B,DEST/PASS,A/ONE,B/@1,RAMADR/AC#, FM WRITE"
; 1736 AC_[]+Q "AD/A+Q,DEST/PASS,A/@1,B/@1,RAMADR/AC#, FM WRITE"
; 1737 AC[]_[]+Q "AD/A+Q,DEST/PASS,A/@2,B/@2,RAMADR/AC*#,ACALU/AC+N,ACN/@1, FM WRITE"
; 1738 AC[]_[]-[] "AD/A-B-.25,DEST/PASS,B/@3,A/@2,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DBUS/DP,FM WRITE,ADD .25"
; 1739 AC[]_[]+[] "AD/A+B,DEST/PASS,B/@3,A/@2,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DBUS/DP,FM WRITE"
; 1740 AC_[]+[] "AD/A+B,DEST/PASS,B/@2,A/@1,RAMADR/AC#,DBUS/DP,FM WRITE"
; 1741 AC[]_[].AND.[] "AD/A.AND.B,DEST/PASS,B/@3,A/@2,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DBUS/DP,FM WRITE"
; 1742 AC[]_Q.AND.[] "AD/A.AND.Q,DEST/PASS,A/@2,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DBUS/DP,FM WRITE"
; 1743 AC[]_[].EQV.Q "AD/A.EQV.Q,DEST/PASS,A/@2,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DBUS/DP,FM WRITE"
; 1744 AC[]_-[] "AD/-B-.25,DEST/PASS,B/@2,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DBUS/DP,FM WRITE,ADD .25"
; 1745 AC_-[] "AD/-A-.25,DEST/PASS,A/@1,RAMADR/AC#,DBUS/DP, ADD .25,FM WRITE"
; 1746 AC_[].OR.[] "AD/A.OR.B,A/@1,B/@2,RAMADR/AC#,DBUS/DP, FM WRITE"
; 1747 AC[]_.NOT.[] "AD/.NOT.B,DEST/PASS,B/@2,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DBUS/DP,FM WRITE"
; 1748 AC_.NOT.[] "AD/.NOT.B,DEST/PASS,B/@1,RAMADR/AC#,DBUS/DP,FM WRITE"
; 1749 AC[]_-Q "AD/-Q-.25,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DBUS/DP,FM WRITE,ADD .25"
; 1750 AC_Q "AD/Q,RAMADR/AC#,DBUS/DP, FM WRITE"
; 1751 AC[]_0 "AD/ZERO,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DBUS/DP, FM WRITE"
; 1752 AC[]_1 "AD/B,DEST/PASS,B/ONE,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DBUS/DP,FM WRITE"
; 1753 AC[]_Q "AD/Q,RAMADR/AC*#,ACALU/AC+N,ACN/@1,DBUS/DP, FM WRITE"
; 1754
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 46
; KS10.MIC[7,3] 14:54 7-JAN-1986 MACROS -- MICROCODE WORK SPACE
; 1755 .TOC "MACROS -- MICROCODE WORK SPACE"
; 1756
; 1757
; 1758 WORK[]_Q "AD/Q,DEST/PASS,RAMADR/#,WORK/@1,FM WRITE"
; 1759 Q_WORK[] "AD/D,DEST/Q_AD,RAMADR/#,DBUS/RAM,WORK/@1,DT/3T"
; 1760 WORK[]_0 "AD/ZERO,DEST/PASS,RAMADR/#,WORK/@1,FM WRITE"
; 1761 WORK[]_1 "AD/B,DEST/PASS,RAMADR/#,WORK/@1,B/ONE,FM WRITE"
; 1762 WORK[]_[] "AD/B,DEST/PASS,RAMADR/#,WORK/@1,B/@2,FM WRITE"
; 1763 WORK[]_[] CLR LH "AD/47,RSRC/AB,DEST/PASS,RAMADR/#,WORK/@1,B/@2,A/MASK,FM WRITE"
; 1764 WORK[]_[]-1 "AD/A-B-.25,A/@2,B/ONE,DEST/PASS,RAMADR/#,WORK/@1,FM WRITE, ADD .25"
; 1765 WORK[]_.NOT.[] "AD/.NOT.B,DEST/PASS,RAMADR/#,WORK/@1,B/@2,FM WRITE"
; 1766 WORK[]_[].AND.[] "AD/A.AND.B,DEST/PASS,RAMADR/#,WORK/@1,A/@2,B/@3,FM WRITE"
; 1767 [].AND.NOT.WORK[] "AD/.NOT.D.AND.A,A/@1,DBUS/RAM,RAMADR/#,WORK/@2,DT/3T"
; 1768 [].AND.WORK[] "AD/D.AND.A,A/@1,DBUS/RAM,RAMADR/#,WORK/@2,DT/3T"
; 1769 []_[]+WORK[] "AD/D+A,A/@2,DEST/AD,B/@1,DBUS/RAM,RAMADR/#,WORK/@3,DT/3T"
; 1770 []_[].AND.WORK[] "AD/D.AND.A,A/@2,DEST/AD,B/@1,DBUS/RAM,RAMADR/#,WORK/@3,DT/3T"
; 1771 []_[].AND.NOT.WORK[] "AD/.NOT.D.AND.A,A/@2,DEST/AD,B/@1,DBUS/RAM,RAMADR/#,WORK/@3,DT/3T"
; 1772 []_[].OR.WORK[] "AD/D.OR.A,A/@2,DEST/AD,B/@1,DBUS/RAM,RAMADR/#,WORK/@3,DT/3T"
; 1773 []_WORK[] "AD/D,DEST/AD,B/@1,DBUS/RAM,RAMADR/#,WORK/@2,DT/3T"
; 1774 []_.NOT.WORK[] "AD/.NOT.D,DEST/AD,B/@1,DBUS/RAM,RAMADR/#,WORK/@2,DT/3T"
; 1775 []_-WORK[] "AD/-D-.25,ADD .25,DEST/AD,B/@1,DBUS/RAM,RAMADR/#,WORK/@2,DT/3T"
; 1776 []_WORK[]+1 "AD/D+A,A/ONE,DEST/AD,B/@1,DBUS/RAM,RAMADR/#,WORK/@2,DT/3T"
; 1777 Q_Q-WORK[] "AD/Q-D-.25,DEST/Q_AD,DBUS/RAM,RAMADR/#,WORK/@1,ADD .25,DT/3T"
; 1778 []_[]-WORK[] "AD/A-D-.25,DEST/AD,A/@2,B/@1,DBUS/RAM,RAMADR/#,WORK/@3,ADD .25,DT/3T"
; 1779
; 1780 RAM_[] "AD/B,DEST/PASS,RAMADR/RAM,B/@1,FM WRITE"
; 1781
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 47
; KS10.MIC[7,3] 14:54 7-JAN-1986 MACROS -- MEMORY CONTROL
; 1782 .TOC "MACROS -- MEMORY CONTROL"
; 1783
; 1784 MEM CYCLE "MEM/1"
; 1785
; 1786 ;THE FOLLOWING MACROS CONTROL MEMORY ADDRESS
; 1787 LOAD VMA "MEM CYCLE,LDVMA/1"
; 1788 FORCE EXEC "FORCE EXEC/1"
; 1789 VMA PHYSICAL "PHYSICAL/1,FORCE EXEC/1,FORCE USER/0,EXT ADR/1,LOAD VMA"
; 1790 VMA PHYSICAL WRITE "LOAD VMA,VMA PHYSICAL,WAIT/1,MEM/1,WRITE CYCLE/1,WRITE TEST/0"
; 1791 VMA PHYSICAL READ "LOAD VMA,VMA PHYSICAL,WAIT/1,MEM/1,READ CYCLE/1,WRITE TEST/0"
; 1792 VMA EXTENDED "EXT ADR/1"
; 1793
; 1794 PXCT EA "PXCT/E1"
; 1795 PXCT DATA "PXCT/D1"
; 1796 PXCT BLT DEST "PXCT/D1"
; 1797 PXCT BYTE PTR EA "PXCT/E2"
; 1798 PXCT BYTE DATA "PXCT/D2"
; 1799 PXCT STACK WORD "PXCT/D2"
; 1800 PXCT BLT SRC "PXCT/D2"
; 1801 PXCT EXTEND EA "PXCT/E2"
; 1802
; 1803 ;THE FOLLOWING MACROS GET MEMORY CYCLES STARTED
; 1804 WRITE TEST "WRITE TEST/1,WAIT/1"
; 1805 START READ "MEM CYCLE,READ CYCLE/1,WAIT/1"
; 1806 START WRITE "MEM CYCLE,WRITE TEST,WRITE CYCLE/1,WAIT/1"
; 1807 START NO TEST WRITE "MEM CYCLE,WRITE CYCLE/1,WAIT/1"
; 1808 FETCH "START READ,FETCH/1,PXCT/CURRENT,WAIT/1"
; 1809
; 1810 ;THE FOLLOWING MACROS COMPLETE MEMORY CYCLES
; 1811 MEM WAIT "MEM CYCLE,WAIT/1"
; 1812 MEM READ "MEM WAIT,DBUS/DBM,DBM/MEM"
; 1813 MEM WRITE "MEM WAIT,DT/3T"
; 1814 SPEC MEM READ "SPEC/WAIT,DBUS/DBM,DBM/MEM"
; 1815 SPEC MEM WRITE "SPEC/WAIT,DT/3T"
; 1816
; 1817
; 1818 ;THINGS WHICH WRITE MEMORY
; 1819 MEM_[] "AD/B,DEST/PASS,B/@1,DBUS/DP,RAMADR/VMA,CHK PARITY"
; 1820 MEM_Q "AD/Q,DBUS/DP,RAMADR/VMA"
; 1821
; 1822
; 1823 ;THINGS WHICH READ MEMORY
; 1824 []_IO DATA "AD/D,DBUS/DBM,RAMADR/VMA,DEST/AD,B/@1"
; 1825 []_MEM "AD/D,DBUS/DBM,RAMADR/VMA,DEST/AD,B/@1,CHK PARITY"
; 1826 []_MEM THEN FETCH "AD/D,DBUS/DBM,RAMADR/VMA,DEST/A,A/PC,B/@1,CHK PARITY, FETCH, LOAD VMA"
; 1827 []_MEM*.5 "AD/D,DBUS/DBM,RAMADR/VMA,DEST/AD*.5,B/@1,CHK PARITY"
; 1828 []_MEM.AND.MASK "AD/D.AND.A,A/MASK,DBUS/DBM,RAMADR/VMA,DEST/AD,B/@1,CHK PARITY"
; 1829 []_(MEM.AND.[])*.5 "AD/D.AND.A,A/@2,DBUS/DBM,RAMADR/VMA,DEST/AD*.5,B/@1,CHK PARITY"
; 1830 Q_MEM "AD/D,DBUS/DBM,RAMADR/VMA,DEST/Q_AD,CHK PARITY"
; 1831
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 48
; KS10.MIC[7,3] 14:54 7-JAN-1986 MACROS -- VMA
; 1832 .TOC "MACROS -- VMA"
; 1833
; 1834 VMA_[] "AD/A,A/@1,DEST/PASS,LOAD VMA"
; 1835 VMA_[] WITH FLAGS "AD/A,A/@1,DEST/PASS,LOAD VMA,WAIT/1, MEM/1, EXT ADR/1, DP FUNC/1, DT/3T"
; 1836 VMA_[].OR.[] WITH FLAGS "AD/A.OR.B,A/@1,B/@2,DEST/PASS,LOAD VMA,WAIT/1, MEM/1, EXT ADR/1, DP FUNC/1, DT/3T"
; 1837 VMA_[]+1 "AD/A+B,A/ONE,B/@1,DEST/AD,HOLD LEFT,LOAD VMA"
; 1838 VMA_[]-1 "AD/B-A-.25,A/ONE,B/@1,ADD .25,HOLD LEFT,LOAD VMA"
; 1839 VMA_[]+XR "AD/D+A,DBUS/RAM,RAMADR/XR#,A/@1,LOAD VMA"
; 1840 VMA_[]+[] "AD/A+B,DEST/PASS,A/@1,B/@2,LOAD VMA"
; 1841
; 1842 NEXT [] PHYSICAL WRITE "AD/A+B,A/ONE,B/@1,DEST/AD,HOLD LEFT,LOAD VMA, VMA PHYSICAL, START WRITE"
; 1843
; 1844 ;MACROS TO LOAD A 2901 REGISTER WITH VMA FLAG BITS
; 1845 []_VMA FLAGS "AD/45,DEST/AD,B/@1,DBM/#,DBUS/DBM,RSRC/D0,A/MASK"
; 1846 []_VMA IO READ "[@1]_VMA FLAGS,READ CYCLE/1,IO CYCLE/1,WRITE TEST/0, PHYSICAL/1, FORCE EXEC/1, FORCE USER/0"
; 1847 []_VMA IO WRITE "[@1]_VMA FLAGS,WRITE CYCLE/1,IO CYCLE/1,WRITE TEST/0, PHYSICAL/1, FORCE EXEC/1, FORCE USER/0"
; 1848
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 49
; KS10.MIC[7,3] 14:54 7-JAN-1986 MACROS -- TIME CONTROL
; 1849 .TOC "MACROS -- TIME CONTROL"
; 1850
; 1851 AC "RAMADR/AC#"
; 1852 AC[] "RAMADR/AC*#,ACALU/AC+N,ACN/@1"
; 1853 XR "RAMADR/XR#"
; 1854 VMA "RAMADR/VMA"
; 1855 WORK[] "RAMADR/#, WORK/@1"
; 1856
; 1857 2T "T/2T"
; 1858 3T "T/3T"
; 1859 4T "T/4T"
; 1860 5T "T/5T"
; 1861
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 50
; KS10.MIC[7,3] 14:54 7-JAN-1986 MACROS -- SCAD, SC, FE LOGIC
; 1862 .TOC "MACROS -- SCAD, SC, FE LOGIC"
; 1863
; 1864 LOAD SC "LOADSC/1"
; 1865 LOAD FE "LOADFE/1"
; 1866 STEP SC "SCAD/A-1,SCADA/SC,LOAD SC,SKIP/SC"
; 1867 SHIFT "SCAD/A+B,SCADA/S#,SCADB/FE,S#/1, LOAD FE, MULTI SHIFT/1"
; 1868
; 1869 SC_SC-1 "SCAD/A-1,SCADA/SC,LOAD SC"
; 1870 SC_SHIFT "SCAD/A+B,SCADA/S#,S#/0,SCADB/SHIFT,LOAD SC"
; 1871 SC_SHIFT-1 "SCAD/A+B,SCADA/S#,S#/1777,SCADB/SHIFT,LOAD SC"
; 1872 SC_SHIFT-2 "SCAD/A+B,SCADA/S#,S#/1776,SCADB/SHIFT,LOAD SC"
; 1873 SC_-SHIFT "SCAD/A-B,SCADA/S#,S#/0000,SCADB/SHIFT,LOAD SC"
; 1874 SC_-SHIFT-1 "SCAD/A-B,SCADA/S#,SCADB/SHIFT,S#/1777,LOAD SC"
; 1875 SC_-SHIFT-2 "SCAD/A-B,SCADA/S#,SCADB/SHIFT,S#/1776,LOAD SC"
; 1876 SC_SC-EXP "SCAD/A-B,SCADA/SC,SCADB/EXP,LOAD SC"
; 1877 SC_SC-EXP-1 "SCAD/A-B-1,SCADA/SC,SCADB/EXP,LOAD SC"
; 1878 SC_SC-FE-1 "SCAD/A-B-1,SCADA/SC,SCADB/FE,LOAD SC"
; 1879 SC_SC-FE "SCAD/A-B,SCADA/SC,SCADB/FE,LOAD SC"
; 1880 SC_EXP "SCAD/A+B,SCADA/S#,S#/0,SCADB/EXP,LOAD SC"
; 1881 SC_S#-FE "SCAD/A-B,SCADA/S#,SCADB/FE,LOAD SC"
; 1882 SC_FE+S# "SCAD/A+B,SCADA/S#,SCADB/FE,LOAD SC"
; 1883 SC_FE "SCAD/A.OR.B,SCADA/S#,S#/0,SCADB/FE,LOAD SC"
; 1884 SC_S# "SCAD/A,SCADA/S#,LOAD SC"
; 1885
; 1886
; 1887 SC_36. "SC_S#,S#/36."
; 1888 SC_35. "SC_S#,S#/35."
; 1889 SC_34. "SC_S#,S#/34."
; 1890 SC_28. "SC_S#,S#/28."
; 1891 SC_27. "SC_S#,S#/27."
; 1892 SC_26. "SC_S#,S#/26."
; 1893 SC_24. "SC_S#,S#/24."
; 1894 SC_22. "SC_S#,S#/22."
; 1895 SC_20. "SC_S#,S#/20."
; 1896 SC_19. "SC_S#,S#/19."
; 1897 SC_14. "SC_S#,S#/14."
; 1898 SC_11. "SC_S#,S#/11."
; 1899 SC_9. "SC_S#,S#/9."
; 1900 SC_8. "SC_S#,S#/8."
; 1901 SC_7 "SC_S#,S#/7"
; 1902 SC_6 "SC_S#,S#/6"
; 1903 SC_5 "SC_S#,S#/5"
; 1904 SC_4 "SC_S#,S#/4"
; 1905 SC_3 "SC_S#,S#/3"
; 1906 SC_2 "SC_S#,S#/2"
; 1907 SC_1 "SC_S#,S#/1"
; 1908 SC_0 "SC_S#,S#/0."
; 1909 SC_-1 "SC_S#,S#/1777"
; 1910 SC_-2 "SC_S#,S#/1776"
; 1911
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 51
; KS10.MIC[7,3] 14:54 7-JAN-1986 MACROS -- SCAD, SC, FE LOGIC
; 1912 FE_-FE "SCAD/A-B,SCADA/S#,S#/0,SCADB/FE,LOAD FE"
; 1913 FE_-FE-1 "SCAD/A-B,SCADA/S#,S#/1777,SCADB/FE,LOAD FE"
; 1914 FE_FE-19 "SCAD/A+B,SCADB/FE,SCADA/S#,S#/1550,LOAD FE"
; 1915 FE_-FE+S# "SCAD/A-B,SCADA/S#,SCADB/FE,LOAD FE"
; 1916 FE_FE+SC "SCAD/A+B,SCADA/SC,SCADB/FE, LOAD FE"
; 1917 FE_FE.AND.S# "SCAD/A.AND.B,SCADA/S#,SCADB/FE, LOAD FE"
; 1918 FE_P "SCAD/A,SCADA/BYTE1, LOAD FE"
; 1919 FE_S "SCAD/A+B, SCADA/S#, S#/0 ,SCADB/SIZE, LOAD FE"
; 1920 FE_S+2 "SCAD/A+B, SCADA/S#, S#/20, SCADB/SIZE, LOAD FE"
; 1921 FE_-S-20 "SCAD/A-B,SCADA/S#,S#/1760,SCADB/SIZE, LOAD FE"
; 1922 FE_-S-10 "SCAD/A-B,SCADA/S#,S#/1770,SCADB/SIZE, LOAD FE"
; 1923 FE_S# "SCAD/A,SCADA/S#,LOAD FE"
; 1924 FE_S#-FE "SCAD/A-B,SCADA/S#,SCADB/FE,LOAD FE"
; 1925 FE_-2 "FE_S#,S#/1776"
; 1926 FE_-12. "FE_S#,S#/1764"
; 1927 FE_0 "FE_S#,S#/0"
; 1928 FE_-1 "FE_S#,S#/1777"
; 1929 FE_FE+1 "SCAD/A+B,SCADA/S#,SCADB/FE,S#/1,LOAD FE"
; 1930 FE_FE+2 "SCAD/A+B,SCADA/S#,SCADB/FE,S#/2,LOAD FE"
; 1931 FE_FE+10 "SCAD/A+B,SCADA/S#,SCADB/FE,S#/10,LOAD FE"
; 1932 FE_FE-1 "SCAD/A+B,SCADA/S#,SCADB/FE,S#/1777,LOAD FE"
; 1933 FE_FE+4 "SCAD/A+B,SCADA/S#,SCADB/FE,S#/4,LOAD FE"
; 1934 FE_EXP "SCAD/A+B,SCADA/S#,S#/0,SCADB/EXP,LOAD FE"
; 1935 FE_SC+EXP "SCAD/A+B,SCADA/SC,SCADB/EXP,LOAD FE"
; 1936 FE_SC-EXP "SCAD/A-B,SCADA/SC,SCADB/EXP,LOAD FE"
; 1937 FE_FE+P "SCAD/A+B,SCADA/BYTE1,SCADB/FE, LOAD FE"
; 1938 FE_FE-200 "SCAD/A+B,SCADA/S#,S#/1600,SCADB/FE,LOAD FE"
; 1939 FE_-FE+200 "SCAD/A-B,SCADA/S#,S#/200,SCADB/FE,LOAD FE"
; 1940 FE_FE+S# "SCAD/A+B,SCADA/S#,SCADB/FE,LOAD FE"
; 1941
; 1942
; 1943 GEN 17-FE "SCAD/A-B,SCADA/S#,S#/210,SCADB/FE"
; 1944
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 52
; KS10.MIC[7,3] 14:54 7-JAN-1986 MACROS -- DATA PATH FIELD CONTROL
; 1945 .TOC "MACROS -- DATA PATH FIELD CONTROL"
; 1946
; 1947 HOLD LEFT "CLKL/0,GENL/0"
; 1948 ADL PARITY "GENL/1"
; 1949 CHK PARITY L "CHKL/1"
; 1950
; 1951 HOLD RIGHT "CLKR/0,GENR/0"
; 1952 ADR PARITY "GENR/1"
; 1953 CHK PARITY R "CHKR/1"
; 1954
; 1955 AD PARITY "AD PARITY OK/1"
; 1956 CHK PARITY "CHKL/1,CHKR/1"
; 1957 BAD PARITY "CHKL/0,CHKR/0"
; 1958
; 1959 INH CRY18 "SPEC/INHCRY18"
; 1960
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 53
; KS10.MIC[7,3] 14:54 7-JAN-1986 MACROS -- SHIFT PATH CONTROL
; 1961 .TOC "MACROS -- SHIFT PATH CONTROL"
; 1962
; 1963 ASH "SHSTYLE/NORM" ;ASH SHIFT
; 1964 LSH "SHSTYLE/NORM" ;LSH SHIFT (SAME HARDWARE AS ASH BUT
; 1965 ; BITS -2 AND -1 ARE PRESET TO ZERO)
; 1966 ROT "SHSTYLE/ROT"
; 1967 LSHC "SHSTYLE/LSHC"
; 1968 ASHC "SHSTYLE/ASHC"
; 1969 ROTC "SHSTYLE/ROTC"
; 1970 ONES "SHSTYLE/ONES" ;SHIFT IN 1 BITS
; 1971 DIV "SHSTYLE/DIV" ;SPECIAL PATH FOR DIVIDE (LIKE ROTC BUT
; 1972 ; COMPLEMENT BIT AS IT GOES AROUND)
; 1973
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 54
; KS10.MIC[7,3] 14:54 7-JAN-1986 MACROS -- SPECIAL FUNCTIONS
; 1974 .TOC "MACROS -- SPECIAL FUNCTIONS"
; 1975
; 1976 LOAD IR "SPEC/LOADIR" ;LOAD INSTRUCTION REG FROM
; 1977 ; DBUS0-DBUS8, LOAD AC# FROM
; 1978 ; DBUS9-DBUS12
; 1979 ; UPDATE LAST-INST-PUBLIC PC FLAG
; 1980 LOAD INST "SPEC/LDINST"
; 1981 LOAD INST EA "SPEC/LOADXR,PXCT/CURRENT"
; 1982 LOAD BYTE EA "SPEC/LOADXR,PXCT/E2"
; 1983 LOAD IND EA "SPEC/LOADXR,PXCT/E1"
; 1984 LOAD SRC EA "SPEC/LOADXR,PXCT/BIS-SRC-EA"
; 1985 LOAD DST EA "SPEC/LOADXR,PXCT/BIS-DST-EA"
; 1986 ADD .25 "CRY38/1" ;GENERATE CARRY IN TO BIT 37
; 1987 CALL [] "CALL/1,J/@1" ;CALL A SUBROUTINE
; 1988 LOAD PXCT "SPEC/LDPXCT" ;LOAD PXCT FLAGS IF EXEC MODE
; 1989 TURN OFF PXCT "SPEC/PXCT OFF"
; 1990 LOAD PAGE TABLE "SPEC/LDPAGE"
; 1991 LOAD AC BLOCKS "SPEC/LDACBLK"
; 1992 SWEEP "SPEC/SWEEP,PHYSICAL/1"
; 1993 CLRCSH "SPEC/CLRCSH,PHYSICAL/1"
; 1994 LOAD PI "SPEC/LDPI"
; 1995 SET HALT "SPEC/#,#/74"
; 1996 CLEAR CONTINUE "SPEC/#,#/40"
; 1997 CLEAR EXECUTE "SPEC/#,#/20"
; 1998 CLEAR RUN "SPEC/#,#/10"
; 1999 UNHALT "SPEC/#,#/62"
; 2000 SET APR ENABLES "SPEC/APR EN"
; 2001 ABORT MEM CYCLE "DBUS/DBM,RAMADR/VMA,DBM/MEM,AD/ZERO,SPEC/MEMCLR,LOAD VMA"
; 2002 CLR IO BUSY "SPEC/CLR IO BUSY"
; 2003 CLR IO LATCH "SPEC/CLR IO LATCH"
; 2004
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 55
; KS10.MIC[7,3] 14:54 7-JAN-1986 MACROS -- PC FLAGS
; 2005 .TOC "MACROS -- PC FLAGS"
; 2006
; 2007 CHANGE FLAGS "SPEC/FLAGS"
; 2008
; 2009 SET AROV "CHANGE FLAGS, HOLD USER/1, SETOV/1, TRAP1/1"
; 2010 SET FOV "CHANGE FLAGS, HOLD USER/1, SETFOV/1, TRAP1/1"
; 2011 SET NO DIVIDE "CHANGE FLAGS, HOLD USER/1, SETOV/1, SETNDV/1, TRAP1/1"
; 2012 SET FL NO DIVIDE "SET NO DIVIDE, SETFOV/1"
; 2013
; 2014 ASH AROV "SPEC/ASHOV"
; 2015 SET FPD "CHANGE FLAGS, HOLD USER/1, SETFPD/1"
; 2016 CLR FPD "CHANGE FLAGS, HOLD USER/1, CLRFPD/1"
; 2017
; 2018 SET PDL OV "CHANGE FLAGS, HOLD USER/1, TRAP2/1"
; 2019 SET TRAP1 "CHANGE FLAGS, HOLD USER/1, TRAP1/1"
; 2020
; 2021 LOAD PCU "CHANGE FLAGS, LD PCU/1"
; 2022 UPDATE USER "CHANGE FLAGS, HOLD USER/1"
; 2023 LEAVE USER "CHANGE FLAGS, HOLD USER/0"
; 2024
; 2025 JFCL FLAGS "CHANGE FLAGS, HOLD USER/1, JFCLFLG/1"
; 2026
; 2027 LOAD FLAGS "CHANGE FLAGS, LD FLAGS/1"
; 2028 EXP TEST "SPEC/EXPTST"
; 2029 AD FLAGS "CHANGE FLAGS, ADFLGS/1, HOLD USER/1"
; 2030
; 2031 NO DIVIDE "SET NO DIVIDE, J/NIDISP"
; 2032 FL NO DIVIDE "SET FL NO DIVIDE, J/NIDISP"
; 2033
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 56
; KS10.MIC[7,3] 14:54 7-JAN-1986 MACROS -- PAGE FAIL FLAGS
; 2034 .TOC "MACROS -- PAGE FAIL FLAGS"
; 2035
; 2036 STATE_[] "[FLG]_#,STATE/@1,HOLD LEFT"
; 2037 END STATE "[FLG]_0, HOLD LEFT"
; 2038
; 2039 END BLT "END STATE"
; 2040 END MAP "END STATE"
; 2041
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 57
; KS10.MIC[7,3] 14:54 7-JAN-1986 MACROS -- SINGLE SKIPS
; 2042 .TOC "MACROS -- SINGLE SKIPS"
; 2043 ;SKIPS IF:
; 2044 SKIP IF AC0 "SKIP/AC0" ;THE AC NUMBER IS ZERO
; 2045 SKIP DP0 "SKIP/DP0" ;DP BIT 0=1
; 2046 SKIP DP18 "SKIP/DP18" ;DP BIT 18=1
; 2047 SKIP AD.EQ.0 "SKIP/ADEQ0,DT/3T" ;ADDER OUTPUT IS ZERO
; 2048 SKIP AD.LE.0 "SKIP/LE,DT/3T" ;ADDER OUTPUT IS LESS THAN OR EQUAL
; 2049 ; TO ZERO.
; 2050 SKIP ADL.LE.0 "SKIP/LLE,DT/3T" ;ADDER LEFT IS LESS THAN OR EQUAL
; 2051 ; TO ZERO.
; 2052 SKIP FPD "SKIP/FPD" ;FIRST-PART-DONE PC FLAG IS SET
; 2053 SKIP KERNEL "SKIP/KERNEL" ;USER=0
; 2054 SKIP IO LEGAL "SKIP/IOLGL" ;USER=0 OR USER IOT=1
; 2055 SKIP CRY0 "SKIP/CRY0" ;ADDER BIT CRY0=1 (NOT PC FLAG BIT)
; 2056 SKIP CRY1 "SKIP/CRY1" ;ADDER BIT CRY1=1 (NOT PC FLAG BIT)
; 2057 SKIP CRY2 "SKIP/CRY2,DT/3T" ;ADDER BIT CRY2=1
; 2058 SKIP JFCL "SKIP/JFCL" ;IF JFCL SHOULD JUMP
; 2059 SKIP ADL.EQ.0 "SKIP/ADLEQ0" ;ALU BITS -2 TO 17 = 0
; 2060 SKIP ADR.EQ.0 "SKIP/ADREQ0" ;ALU BITS 18-35 = 0
; 2061 SKIP IRPT "SKIP/INT" ;INTERRUPT IS PENDING
; 2062 SKIP -1MS "SKIP/-1 MS" ;DON'T SKIP IF 1MS TIMER HAS EXPIRED.
; 2063 SKIP AC REF "SKIP/ACREF" ;VMA IS 0-17
; 2064 SKIP EXECUTE "SKIP/EXECUTE" ;CONSOLE EXECUTE
; 2065 TXXX TEST "SKIP/TXXX" ;TEST INSTRUCTION SHOULD SKIP
; 2066
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 58
; KS10.MIC[7,3] 14:54 7-JAN-1986 MACROS -- SPECIAL DISPATCH MACROS
; 2067 .TOC "MACROS -- SPECIAL DISPATCH MACROS"
; 2068
; 2069 NEXT INST "DISP/NICOND,SPEC/NICOND,J/NICOND"
; 2070 NEXT INST FETCH "DISP/NICOND,SPEC/NICOND,J/NICOND-FETCH"
; 2071 EA MODE DISP "DISP/EAMODE,RAMADR/XR#"
; 2072 AREAD "DISP/AREAD,WAIT/1,AREAD/1,MEM/1,J/0"
; 2073 B DISP "DISP/BDISP"
; 2074 BWRITE DISP "B DISP,MEM/1,BWRITE/1,WRITE CYCLE/1,J/BWRITE"
; 2075 INST DISP "DISP/DROM,J/0"
; 2076 EXIT "BWRITE DISP,SPEC/0, WRITE TEST/1"
; 2077 AD FLAGS EXIT "BWRITE DISP, WRITE TEST/0, AD FLAGS"
; 2078 FL-EXIT "WRITE CYCLE/1,WRITE TEST/1,MEM/1,BWRITE/1,B DISP,J/FL-BWRITE"
; 2079 TEST DISP "B DISP,J/TEST-TABLE"
; 2080 SKIP-COMP DISP "B DISP,J/SKIP-COMP-TABLE"
; 2081 JUMP DISP "B DISP,J/JUMP-TABLE"
; 2082 DONE "VMA_[PC],LOAD VMA, FETCH, NEXT INST FETCH"
; 2083 JUMPA "[PC]_[AR],HOLD LEFT,LOAD VMA,FETCH,NEXT INST FETCH"
; 2084 UUO "[HR]_[HR].AND.#,#/777740,HOLD RIGHT,J/UUOGO"
; 2085 LUUO "[AR]_0 XWD [40], J/LUUO1"
; 2086 PAGE FAIL TRAP "TL [FLG], FLG.PI/1, J/PFT"
; 2087 TAKE INTERRUPT "[FLG]_[FLG].OR.#,FLG.PI/1,HOLD RIGHT,J/PI"
; 2088 INTERRUPT TRAP "WORK[SV.AR]_[AR], J/ITRAP"
; 2089 MUL DISP "DISP/MUL"
; 2090 DIV DISP "DISP/DIV"
; 2091 BYTE DISP "DISP/BYTE, DT/3T"
; 2092 SCAD DISP "DISP/SCAD0" ;SKIP (2'S WEIGHT) IS SCAD IS MINUS
; 2093 RETURN [] "DISP/RETURN,J/@1"
; 2094 PI DISP "DISP/PI"
; 2095 NORM DISP "DISP/NORM,DT/3T"
; 2096 DISMISS "TR [PI], #/077400, CALL [JEN1],DT/3T"
; 2097 CALL LOAD PI "[T0]_[PI] SWAP, CALL [LDPI2]"
; 2098 HALT [] "AD/47,DEST/AD,B/T1,DBM/#,DBUS/DBM,HALT/@1,RSRC/DA,A/MASK, J/HALTED"
; 2099 CLEANUP DISP "READ [FLG], DBUS/DP, DISP/DP, 3T, J/CLEANUP"
; 2100
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 59
; KS10.MIC[7,3] 14:54 7-JAN-1986 DISPATCH ROM MACROS
; 2101 .TOC "DISPATCH ROM MACROS"
; 2102 .DCODE
; 2103
; 2104 ;"A FIELD" MACROS SAY HOW TO FETCH ARGUMENTS
; 2105
; 2106 I "I/1"
; 2107 I-PF "I/1,VMA/0,READ/1"
; 2108 R "A/READ,READ/1"
; 2109 R-PF "A/RD-PF,READ/1"
; 2110 W "A/WRITE,TEST/1"
; 2111 RW "A/READ,TEST/1,READ/1"
; 2112 IW "I/1,TEST/1" ;IMMED WHICH STORE IN E. (SETZM, ETC.)
; 2113 IR "I/1,READ/1" ;START READ A GO TO EXECUTE CODE
; 2114 DBL R "A/DREAD,READ/1" ;AR!ARX _ E!E+1
; 2115 DBL AC "A/DBLAC"
; 2116 SH "A/SHIFT,VMA/0,READ/1"
; 2117 SHC "A/DSHIFT,VMA/0,READ/1"
; 2118 FL-R "A/FP,READ/1" ;FLOATING POINT READ
; 2119 FL-RW "A/FP,READ/1,TEST/1"
; 2120 FL-I "A/FPI,READ/0" ;FLOATING POINT IMMEDIATE
; 2121 DBL FL-R "A/DFP,READ/1"
; 2122 IOT "A/IOT" ;CHECK FOR IO LEGAL
; 2123
; 2124 ;"B FIELD" MACROS SAY HOW TO STORE RESULTS
; 2125
; 2126 AC "B/AC"
; 2127 M "B/MEM,TEST/1,COND FUNC/1"
; 2128 B "B/BOTH,TEST/1,COND FUNC/1"
; 2129 S "B/SELF,TEST/1,COND FUNC/1"
; 2130 DAC "B/DBLAC"
; 2131 DBL B "B/DBLB,TEST/1,COND FUNC/1"
; 2132 FL-AC "FL-B/AC" ;FLOATING POINT
; 2133 FL-MEM "FL-B/MEM,TEST/1,COND FUNC/1" ;FLOATING POINT TO MEMORY
; 2134 FL-BOTH "FL-B/BOTH,TEST/1,COND FUNC/1" ;FLOATING POINT TO BOTH
; 2135 ROUND "ROUND/1" ;FLOATING POINT ROUNDED
; 2136
; 2137
; 2138 ;CONTROL BITS
; 2139 W TEST "TEST/1"
; 2140 AC DISP "ACDISP/1"
; 2141 .UCODE
; 2142
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 60
; SIMPLE.MIC[7,3] 16:49 11-NOV-1985 DISPATCH ROM MACROS
; 2143 .BIN
; 2144 .TOC "POWER UP SEQUENCE"
; 2145
; 2146 .UCODE
; 2147
; 2148 ;HERE IS WHERE WE FIRE THE MACHINE UP DURING POWER ON
; 2149
; 2150
U 0000, 0002,3771,0012,4374,4007,0700,0000,0037,7777 ; 2151 0: [MASK]_#, #/377777 ;BUILD A MASK WITH
U 0002, 0013,3445,1212,4174,4007,0700,0000,0000,0000 ; 2152 [MASK]_[MASK]*2 ; A ONE IN 36-BITS AND 0
U 0013, 0053,3551,1212,4374,4007,0700,0000,0000,0001 ; 2153 [MASK]_[MASK].OR.#,#/1 ; IN BITS -2,-1,36,37
U 0053, 0061,3447,1200,4174,4007,0700,0000,0000,0000 ; 2154 [MAG]_[MASK]*.5 ;MAKE CONSTANT
U 0061, 0071,3771,0015,4374,4007,0700,0000,0000,0001 ; 2155 [XWD1]_#, #/1 ;CONSTANT WITH 1 IN EACH
; 2156 ; HALF WORD
; 2157 [ONE]_0 XWD [1], ;THE CONSTANT 1
U 0071, 0003,4751,1207,4374,4007,0700,0010,0000,0001 ; 2158 CALL/1 ;RESET STACK (CAN NEVER RETURN
; 2159 ; TO WHERE MR LEFT US)
U 0003, 0100,4751,1203,4374,4007,0700,0000,0037,6000 ; 2160 3: [AR]_0 XWD [376000] ;ADDRESS OF HALT STATUS
; 2161 ; BLOCK
U 0100, 0106,3333,0003,7174,4007,0700,0400,0000,0227 ; 2162 WORK[HSBADR]_[AR] ;SAVE FOR HALT LOOP
U 0106, 0110,4221,0011,4364,4277,0700,0200,0000,0010 ; 2163 [UBR]_0, ABORT MEM CYCLE ;CLEAR THE UBR AND RESET
; 2164 ; MEMORY CONTROL LOGIC
U 0110, 0125,4221,0010,4174,4477,0700,0000,0000,0000 ; 2165 [EBR]_0, LOAD AC BLOCKS ;CLEAR THE EBR AND FORCE
; 2166 ; PREVIOUS AND CURRENT AC
; 2167 ; BLOCKS TO ZERO
U 0125, 0131,4221,0013,4174,4257,0700,0000,0000,0000 ; 2168 [FLG]_0, SET APR ENABLES ;CLEAR THE STATUS FLAGS AND
; 2169 ; DISABLE ALL APR CONDITIONS
U 0131, 0162,3333,0013,7174,4007,0700,0400,0000,0230 ; 2170 WORK[APR]_[FLG] ;ZERO REMEMBERED ENABLES
; 2171
U 0162, 0212,3333,0013,7174,4007,0700,0400,0000,0300 ; 2172 WORK[TIME0]_[FLG] ;CLEAR TIME BASE
U 0212, 0214,3333,0013,7174,4007,0700,0400,0000,0301 ; 2173 WORK[TIME1]_[FLG] ; ..
; 2174 .IF/FULL
U 0214, 0223,4223,0000,1174,4007,0700,0400,0000,1443 ; 2175 AC[BIN0]_0 ;COMPUTE A TABLE OF POWERS OF
U 0223, 0226,3333,0007,1174,4007,0700,0400,0000,1444 ; 2176 AC[BIN1]_1 ; TEN
U 0226, 0235,4221,0003,4174,4007,0700,2000,0071,0023 ; 2177 [AR]_0, SC_19. ;WE WANT TO GET 22 NUMBERS
U 0235, 0242,3333,0007,7174,4007,0700,0400,0000,0344 ; 2178 WORK[DECLO]_1 ;STARTING WITH 1
U 0242, 0244,4223,0000,7174,4007,0700,0400,0000,0373 ; 2179 WORK[DECHI]_0 ; ..
U 0244, 0311,3771,0002,4374,4007,0700,0000,0000,0344 ; 2180 [HR]_#, WORK/DECLO ;ADDRESS OF LOW WORD
U 0311, 0323,3771,0006,4374,4007,0700,0000,0000,0373 ; 2181 [BRX]_#, WORK/DECHI ;ADDRESS OF HIGH WORD
U 0323, 0010,0111,0706,4174,4007,0700,0200,0000,0010 ; 2182 TENLP: [BRX]_[BRX]+1, LOAD VMA ;ADDRESS THE HIGH WORD
; 2183 =0* [ARX]_AC[BIN1], ;LOW WORD TO ARX
U 0010, 0560,3771,0004,1276,6007,0701,0010,0000,1444 ; 2184 CALL [DBSLOW] ;MULTIPLY BY TEN
U 0012, 0324,3333,0005,6174,4007,0700,0400,0000,0000 ; 2185 RAM_[BR] ;SAVE HIGH WORD
U 0324, 0334,0111,0702,4174,4007,0700,0200,0000,0010 ; 2186 [HR]_[HR]+1, LOAD VMA ;WHERE TO STORE LOW WORD
U 0334, 0224,3333,0004,6174,4007,0630,2400,0060,0000 ; 2187 RAM_[ARX], STEP SC ;STORE LOW WORD AND SEE IF
; 2188 ; WE ARE DONE
U 0224, 0323,4443,0000,4174,4007,0700,0000,0000,0000 ; 2189 =0 J/TENLP ;NOT YET--KEEP GOING
U 0225, 0140,6553,0500,4374,4007,0321,0000,0033,0656 ; 2190 [BR].XOR.#, 3T, SKIP ADL.EQ.0, #/330656
; 2191 ;DID WE GET THE RIGHT ANSWER
; 2192 ; IN THE TOP 18 BITS?
U 0140, 0104,4751,1217,4374,4007,0700,0000,0000,1005 ; 2193 =0**0 HALT [MULERR] ;NO--CPU IS BROKEN
; 2194 .ENDIF/FULL
; 2195
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 61
; SIMPLE.MIC[7,3] 16:49 11-NOV-1985 POWER UP SEQUENCE
U 0141, 3607,4221,0014,4174,4007,0700,0010,0000,0000 ; 2196 =0**1 [PI]_0, CALL [LOADPI] ;CLEAR PI STATE
; 2197 =1**1 ;CLEAR REGISTERS SO NO
; 2198 ;PARITY ERROR HAPPEN
;;2199 .IFNOT/FULL
;;2200 [ARX]_0 ;WRITTEN WHILE COMPUTING POWERS
;;2201 [BR]_0 ;OF 10
;;2202 [BRX]_0
; 2203 .ENDIF/FULL
U 0151, 0343,4751,1217,4374,4007,0700,0000,0000,0120 ; 2204 [T1]_0 XWD [120] ;RH OF 120 CONTAINS START ADDRESS
; 2205 ; FOR SIMULATOR. FOR THE REAL
; 2206 ; MACHINE IT IS JUST DATA WITH
; 2207 ; GOOD PARITY.
; 2208 =
; 2209 ;THE CODE UNDER .IF/SIM MUST USE THE SAME ADDRESS AS THE CODE
; 2210 ; UNDER .IFNOT/SIM SO THAT MICROCODE ADDRESSES DO NOT CHANGE BETWEEN
; 2211 ; VERSIONS
;;2212 .IF/SIM
;;2213 VMA_[T1], START READ ;READ THE WORD
;;2214 MEM READ, [PC]_MEM, HOLD LEFT, J/START
;;2215 ;GO FIRE UP SIMULATOR AT THE
;;2216 ; PROGRAMS STARTING ADDRESS
; 2217 .IFNOT/SIM
; 2218 [PC]_0, ;CLEAR LH OF PC
; 2219 LEAVE USER, ;ENTER EXEC MODE
U 0343, 0346,4221,0001,4174,4467,0700,0000,0000,0004 ; 2220 LOAD FLAGS ;CLEAR TRAP FLAGS
; 2221 [T1]_#, HALT/POWER, ;LOAD T1 WITH POWER UP CODE
U 0346, 0116,3771,0017,4374,4007,0700,0000,0000,0000 ; 2222 J/PWRON ;ENTER HALT LOOP. DO NOT STORE
; 2223 ; HALT STATUS BLOCK
; 2224 .ENDIF/SIM
; 2225
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 62
; SIMPLE.MIC[7,3] 16:49 11-NOV-1985 THE INSTRUCTION LOOP -- START NEXT INSTRUCTION
; 2226 .TOC "THE INSTRUCTION LOOP -- START NEXT INSTRUCTION"
; 2227
; 2228 ;ALL INSTRUCTIONS EXCEPT JUMP'S AND UUO'S END UP HERE
; 2229 1400:
U 1400, 0110,3443,0100,4174,4156,4700,0200,0014,0012 ; 2230 DONE: DONE
U 1401, 0110,0111,0701,4170,4156,4700,0200,0014,0012 ; 2231 1401: VMA_[PC]+1, NEXT INST FETCH, FETCH
; 2232 =0
U 0260, 0110,0111,0701,4170,4156,4700,0200,0014,0012 ; 2233 SKIP: VMA_[PC]+1, NEXT INST FETCH, FETCH
U 0261, 0110,3443,0100,4174,4156,4700,0200,0014,0012 ; 2234 DONE
; 2235
; 2236
; 2237 ;16-WAY DISPATCH BASED ON NEXT INSTRUCTION
; 2238 =0000
; 2239 NICOND:
; 2240 =0001 [AR]_0 XWD [423], ;TRAP TYPE 3
; 2241 ; GET ADDRESS OF TRAP INST
; 2242 TURN OFF PXCT, ;CLEAR PXCT
U 0101, 3474,4751,1203,4374,4367,0700,0000,0000,0423 ; 2243 J/TRAP ;PROCESS TRAP (INOUT.MIC)
; 2244 =0010 [AR]_0 XWD [422], ;TRAP TYPE 2
; 2245 TURN OFF PXCT, ;CLEAR PXCT
U 0102, 3474,4751,1203,4374,4367,0700,0000,0000,0422 ; 2246 J/TRAP ;GO TRAP
; 2247 =0011 [AR]_0 XWD [421], ;TRAP TYPE 1
; 2248 TURN OFF PXCT, ;TURN OF PXCT
U 0103, 3474,4751,1203,4374,4367,0700,0000,0000,0421 ; 2249 J/TRAP ;GO TRAP
U 0105, 0104,4751,1217,4374,4007,0700,0000,0000,0002 ; 2250 =0101 HALT [CSL] ;"HA" COMMAND TO 8080
; 2251 =0111
; 2252 VMA_[PC], ;LOAD VMA
; 2253 FETCH, ;INDICATE INSTRUCTION FETCH
U 0107, 0117,3443,0100,4174,4007,0700,0200,0014,0012 ; 2254 J/XCTGO ;GO GET INSTRUCTION
; 2255 ;THE NEXT SET OF CASES ARE USED WHEN THERE IS A FETCH
; 2256 ; IN PROGESS
; 2257 =1000
; 2258 NICOND-FETCH:
; 2259 =1001 [AR]_0 XWD [423], ;TRAP TYPE 3
; 2260 TURN OFF PXCT,
U 0111, 3474,4751,1203,4374,4367,0700,0000,0000,0423 ; 2261 J/TRAP
; 2262 =1010 [AR]_0 XWD [422], ;TRAP TYPE 2
; 2263 TURN OFF PXCT,
U 0112, 3474,4751,1203,4374,4367,0700,0000,0000,0422 ; 2264 J/TRAP
; 2265 =1011 [AR]_0 XWD [421], ;TRAP TYPE 1
; 2266 TURN OFF PXCT,
U 0113, 3474,4751,1203,4374,4367,0700,0000,0000,0421 ; 2267 J/TRAP
U 0115, 0104,4751,1217,4374,4007,0700,0000,0000,0002 ; 2268 =1101 HALT [CSL] ;"HA" COMMAND TO 8080
; 2269 =1111
; 2270 XCTGO: MEM READ, ;WAIT FOR MEMORY
; 2271 [HR]_MEM, ;PUT DATA IN HR
; 2272 LOAD INST, ;LOAD IR & AC #
U 0117, 0363,3771,0002,4365,5617,0700,0200,0000,0002 ; 2273 J/INCPC ;GO BUMP PC
; 2274 =
; 2275
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 63
; SIMPLE.MIC[7,3] 16:49 11-NOV-1985 THE INSTRUCTION LOOP -- START NEXT INSTRUCTION
; 2276 ;HERE WE POINT PC TO NEXT INSTRUCTION WHILE WE WAIT FOR
; 2277 ; EFFECTIVE ADDRESS LOGIC TO SETTLE
; 2278 INCPC: VMA_[PC]+1, ;ADDRESS OF NEXT INSTRUCTION
; 2279 FETCH/1, ;INSTRUCTION FETCH
; 2280 TURN OFF PXCT, ;CLEAR EFFECT OF PXCT
U 0363, 0201,0111,0701,2170,4366,6700,0200,0010,0010 ; 2281 EA MODE DISP ;DISPACTH OF INDEXING AND @
; 2282
; 2283 ;MAIN EFFECTIVE ADDRESS CALCULATION
; 2284 =0001
; 2285 EACALC:
; 2286 ;
; 2287 ; THE FIRST 4 CASES ARE USED ONLY FOR JRST
; 2288 ;
; 2289
; 2290 ;CASE 0 -- JRST 0,FOO(XR)
; 2291 [PC]_[HR]+XR, ;UPDATE PC
; 2292 HOLD LEFT, ;ONLY RH
; 2293 LOAD VMA, FETCH, ;START GETTING IT
U 0201, 0110,0551,0201,2270,4156,4700,0200,0014,0012 ; 2294 NEXT INST FETCH ;START NEXT INST
; 2295
; 2296 ;CASE 2 -- JRST 0,FOO
; 2297 [PC]_[HR], ;NEW PC
; 2298 HOLD LEFT, ;ONLY RH
; 2299 LOAD VMA, FETCH, ;START GETTING IT
U 0203, 0110,3441,0201,4170,4156,4700,0200,0014,0012 ; 2300 NEXT INST FETCH ;START NEXT INST
; 2301
; 2302 ;CASE 4 -- JRST 0,@FOO(XR)
; 2303 [HR]_[HR]+XR, ;ADD IN INDEX
; 2304 START READ, ;START TO FETCH @ WORD
; 2305 LOAD VMA, ;PUT ADDRESS IN VMA
U 0205, 0366,0551,0202,2270,4007,0700,0200,0004,0012 ; 2306 J/FETIND ;GO DO MEM WAIT (FORGET ABOUT JRST)
; 2307
; 2308 ;CASE 6 -- JRST 0,@FOO
; 2309 VMA_[HR], ;LOAD UP ADDRESS
; 2310 START READ, ;START TO FETCH @ WORD
U 0207, 0366,3443,0200,4174,4007,0700,0200,0004,0012 ; 2311 J/FETIND ;GO DO MEM WAIT (FORGET ABOUT JRST)
; 2312
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 64
; SIMPLE.MIC[7,3] 16:49 11-NOV-1985 THE INSTRUCTION LOOP -- START NEXT INSTRUCTION
; 2313 ;
; 2314 ;THESE 4 ARE FOR THE NON-JRST CASE
; 2315 ;
; 2316
; 2317 ;CASE 10 -- JUST INDEXING
; 2318 INDEX: [HR]_[HR]+XR, ;ADD IN INDEX REGISTER
U 0211, 0213,0551,0202,2270,4007,0700,0000,0000,0000 ; 2319 HOLD LEFT ;JUST DO RIGHT HALF
; 2320
; 2321 ;CASE 12 -- NO INDEXING OR INDIRECT
; 2322 NOMOD: [AR]_EA, ;PUT 0,,E IN AR
U 0213, 0000,5741,0203,4174,4001,3700,0200,0000,0342 ; 2323 PXCT DATA, AREAD ;DO ONE OR MORE OF THE FOLLWING
; 2324 ; ACCORDING TO THE DROM:
; 2325 ;1. LOAD VMA
; 2326 ;2. START READ OR WRITE
; 2327 ;3. DISPATCH TO 40-57
; 2328 ; OR DIRECTLY TO EXECUTE CODE
; 2329
; 2330 ;CASE 14 -- BOTH INDEXING AND INDIRECT
; 2331 BOTH: [HR]_[HR]+XR, ;ADD IN INDEX REGISTER
; 2332 LOAD VMA, PXCT EA, ;PUT ADDRESS IN VMA
U 0215, 0366,0551,0202,2270,4007,0700,0200,0004,0112 ; 2333 START READ, J/FETIND ;START CYCLE AND GO WAIT FOR DATA
; 2334
; 2335 ;CASE 16 -- JUST INDIRECT
; 2336 INDRCT: VMA_[HR], ;LOAD ADDRESS OF @ WORD
U 0217, 0366,3443,0200,4174,4007,0700,0200,0004,0112 ; 2337 START READ, PXCT EA ;START CYCLE
; 2338
; 2339
; 2340 ;HERE TO FETCH INDIRECT WORD
; 2341 FETIND: MEM READ, [HR]_MEM, ;GET DATA WORD
; 2342 HOLD LEFT, ;JUST RIGHT HALF
U 0366, 0371,3771,0002,4361,5217,0700,0200,0000,0102 ; 2343 LOAD IND EA ;RELOAD @ AND INDEX FLOPS
; 2344
; 2345 XCT2: VMA_[PC], ;PUT PC BACK IN VMA
; 2346 FETCH/1, ;TURN ON FETCH FLAG
; 2347 EA MODE DISP, ;REDO CALCULATION FOR
U 0371, 0201,3443,0100,2174,4006,6700,0200,0010,0010 ; 2348 J/EACALC ; NEW WORD
; 2349
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 65
; SIMPLE.MIC[7,3] 16:49 11-NOV-1985 THE INSTRUCTION LOOP -- FETCH ARGUMENTS
; 2350 .TOC "THE INSTRUCTION LOOP -- FETCH ARGUMENTS"
; 2351 ;HERE ON AREAD DISP TO HANDLE VARIOUS CASES OF ARGUMENT FETCH
; 2352
; 2353 ;CASE 0 -- READ (E)
; 2354 40: MEM READ, ;WAIT FOR DATA
; 2355 [AR]_MEM, ;PUT WORD IN AR
U 0040, 0000,3771,0003,4365,5001,2700,0200,0000,0002 ; 2356 INST DISP ;GO TO EXECUTE CODE
; 2357
; 2358 ;CASE 1 -- WRITE (E)
; 2359 41: [AR]_AC, ;PUT AC IN AR
U 0041, 0000,3771,0003,0276,6001,2700,0000,0000,0000 ; 2360 INST DISP ;GO TO EXECUTE CODE
; 2361
; 2362 ;CASE 2 -- DOUBLE READ
; 2363 42: MEM READ, ;WAIT FOR DATA
U 0042, 0401,3771,0003,4365,5007,0700,0200,0000,0002 ; 2364 [AR]_MEM ;PUT HI WORD IN AR
; 2365 VMA_[HR]+1, PXCT DATA, ;POINT TO E+1
U 0401, 0406,0111,0702,4170,4007,0700,0200,0004,0312 ; 2366 START READ ;START MEMORY CYCLE
; 2367 MEM READ, ;WAIT FOR DATA
; 2368 [ARX]_MEM, ;LOW WORD IN ARX
U 0406, 0000,3771,0004,4365,5001,2700,0200,0000,0002 ; 2369 INST DISP ;GO TO EXECUTE CODE
; 2370
; 2371 ;CASE 3 -- DOUBLE AC
U 0043, 0415,3771,0003,0276,6007,0700,0000,0000,0000 ; 2372 43: [AR]_AC ;GET HIGH AC
; 2373 [ARX]_AC[1], ;PUT C(AC+1) IN ARX
U 0415, 0000,3771,0004,1276,6001,2701,0000,0000,1441 ; 2374 INST DISP ;GO TO EXECUTE CODE
; 2375
; 2376 ;CASE 4 -- SHIFT
; 2377 44:
; 2378 SHIFT: READ [AR], ;LOOK AT EFFECTIVE ADDRESS
; 2379 SKIP DP18, ;SEE IF LEFT OR RIGHT
; 2380 SC_SHIFT-1, ;PUT NUMBER OF PLACES TO SHIFT IN
; 2381 LOAD FE, ; SC AND FE
U 0044, 0000,3333,0003,4174,4001,2530,3000,0041,5777 ; 2382 INST DISP ;GO DO THE SHIFT
; 2383
; 2384 ;CASE 5 -- SHIFT COMBINED
U 0045, 0416,3772,0000,1275,5007,0701,0000,0000,1441 ; 2385 45: Q_AC[1] ;PUT LOW WORD IN Q
U 0416, 0431,3776,0005,0274,4007,0701,0000,0000,0000 ; 2386 [BR]_AC*.5 LONG ;PUT AC IN BR & SHIFT BR!Q RIGHT
; 2387 [BR]_[BR]*.5 LONG, ;SHIFT BR!Q 1 MORE PLACE RIGHT
U 0431, 0044,3446,0505,4174,4007,0700,0000,0000,0000 ; 2388 J/SHIFT ;GO DO SHIFT SETUP
; 2389
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 66
; SIMPLE.MIC[7,3] 16:49 11-NOV-1985 THE INSTRUCTION LOOP -- FETCH ARGUMENTS
; 2390 ;CASE 6 -- FLOATING POINT IMMEDIATE
; 2391 46: [AR]_[AR] SWAP, ;FLIP BITS TO LEFT HALF
U 0046, 0372,3770,0303,4344,4007,0700,0000,0000,0000 ; 2392 J/FPR0 ;JOIN COMMON F.P. CODE
; 2393
; 2394 ;CASE 7 -- FLOATING POINT
; 2395 47: MEM READ, ;WAIT FOR MEMORY (SPEC/MEM WAIT)
U 0047, 0372,3771,0003,4365,5007,0700,0200,0000,0002 ; 2396 [AR]_MEM ;DATA INTO AR
; 2397 =0
; 2398 FPR0: READ [AR], ;LOOK AT NUMBER
; 2399 SC_EXP, FE_EXP, ;PUT EXPONENT IN SC & FE
; 2400 SKIP DP0, ;SEE IF NEGATIVE
U 0372, 0412,3333,0003,4174,4007,0520,3010,0041,2000 ; 2401 CALL [ARSIGN] ;EXTEND AR SIGN
; 2402 FPR1: [ARX]_0, ;ZERO ARX
U 0373, 0000,4221,0004,4174,4001,2700,0000,0000,0000 ; 2403 INST DISP ;GO TO EXECUTE CODE
; 2404
; 2405 ;CASE 10 -- READ THEN PREFETCH
; 2406 50: MEM READ, ;WAIT FOR DATA
; 2407 [AR]_MEM THEN FETCH, ;PUT DATA IN AR AND START A READ
; 2408 ; VMA HAS PC+1.
U 0050, 0000,3770,0103,4365,5001,2700,0200,0014,0012 ; 2409 INST DISP ;GO DO IT
; 2410
; 2411 ;CASE 11 -- DOUBLE FLOATING READ
; 2412 51: SPEC MEM READ, ;WAIT FOR DATA
; 2413 [BR]_MEM, ;HOLD IN BR
; 2414 SC_EXP, FE_EXP, ;SAVE EXPONENT
U 0051, 0402,3771,0005,4365,5177,0521,3000,0041,2000 ; 2415 SKIP DP0, 3T ;SEE IF MINUS
; 2416 =0 [AR]_[AR]+1, ;POINT TO E+1
; 2417 LOAD VMA, PXCT DATA, ;PUT IN VMA
U 0402, 0445,0111,0703,4174,4007,0700,0200,0004,0312 ; 2418 START READ, J/DFPR1 ;GO GET POSITIVE DATA
; 2419 [AR]_[AR]+1, ;POINT TO E+1
; 2420 LOAD VMA, PXCT DATA, ;PUT IN VMA
U 0403, 0432,0111,0703,4174,4007,0700,0200,0004,0312 ; 2421 START READ ;GO GET NEGATIVE DATA
; 2422 [BR]_-SIGN, ;SMEAR MINUS SIGN
U 0432, 0451,3551,0505,4374,0007,0700,0000,0077,7000 ; 2423 J/DFPR2 ;CONTINUE BELOW
U 0445, 0451,4551,0505,4374,0007,0700,0000,0000,0777 ; 2424 DFPR1: [BR]_+SIGN ;SMEAR PLUS SIGN
; 2425 DFPR2: MEM READ, 3T, ;WAIT FOR MEMORY
; 2426 [ARX]_(MEM.AND.[MAG])*.5,
U 0451, 0452,4557,0004,4365,5007,0701,0200,0000,0002 ; 2427 ASH ;SET SHIFT PATHS
U 0452, 0467,3447,0503,4174,4007,0700,0000,0000,0000 ; 2428 [AR]_[BR]*.5 ;SHIFT AR
; 2429 [AR]_[AR]*.5, ;COMPLETE SHIFTING
U 0467, 0471,3447,0303,4174,4007,0700,2000,0011,0000 ; 2430 SC_FE ;PAGE FAIL MAY HAVE ZAPPED
; 2431 ; THE SC.
; 2432 VMA_[PC], FETCH, ;GET NEXT INST
U 0471, 0000,3443,0100,4174,4001,2700,0200,0014,0012 ; 2433 INST DISP ;DO THIS ONE
; 2434
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 67
; SIMPLE.MIC[7,3] 16:49 11-NOV-1985 THE INSTRUCTION LOOP -- FETCH ARGUMENTS
; 2435 ;CASE 12 -- TEST FOR IO LEGAL
U 0052, 0404,4443,0000,4174,4007,0040,0000,0000,0000 ; 2436 52: SKIP IO LEGAL ;IS IO LEGAL?
U 0404, 2737,4551,0202,4374,0007,0700,0000,0077,7740 ; 2437 =0 UUO ;NO
U 0405, 0000,4443,0000,4174,4001,2700,0000,0000,0000 ; 2438 INST DISP ;YES--DO THE INSTRUCTION
; 2439
; 2440
; 2441 ;CASE 13 -- RESERVED
; 2442 ;53:
; 2443
; 2444 ;CASE 14 -- RESERVED
; 2445 ;54:
; 2446
; 2447 ;CASE 15 -- RESERVED
; 2448 ;55:
; 2449
; 2450 ;CASE 16 -- RESERVED
; 2451 ;56:
; 2452
; 2453 ;CASE 17 -- RESERVED
; 2454 ;57:
; 2455
; 2456 ;EXTEND AR SIGN.
; 2457 ;CALL WITH SKIP ON AR0, RETURNS 1 ALWAYS
; 2458 =0
U 0412, 0001,4551,0303,4374,0004,1700,0000,0000,0777 ; 2459 ARSIGN: [AR]_+SIGN, RETURN [1] ;EXTEND + SIGN
U 0413, 0001,3551,0303,4374,0004,1700,0000,0077,7000 ; 2460 [AR]_-SIGN, RETURN [1] ;EXTEND - SIGN
; 2461
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 68
; SIMPLE.MIC[7,3] 16:49 11-NOV-1985 THE INSTRUCTION LOOP -- STORE ANSWERS
; 2462 .TOC "THE INSTRUCTION LOOP -- STORE ANSWERS"
; 2463
; 2464 ;NOTE: INSTRUCTIONS WHICH STORE IN BOTH AC AND MEMORY
; 2465 ; (E.G. ADDB, AOS) MUST STORE IN MEMORY FIRST
; 2466 ; SO THAT IF A PAGE FAIL HAPPENS THE AC IS
; 2467 ; STILL INTACT.
; 2468
; 2469 1500:
; 2470 BWRITE: ;BASE ADDRESS OF BWRITE DISPATCH
; 2471
; 2472 ;CASE 0 -- RESERVED
; 2473 ;1500:
; 2474
; 2475 ;CASE 1 -- RESERVED
; 2476 ;1501:
; 2477
; 2478 ;CASE 2 -- RESERVED
; 2479 ;1502:
; 2480
; 2481 ;CASE 3 -- RESERVED
; 2482 ;1503:
; 2483
; 2484 ;CASE 4 -- STORE SELF
; 2485 1504:
; 2486 STSELF: SKIP IF AC0, ;IS AC # ZERO?
U 1504, 0434,4443,0000,4174,4007,0360,0000,0000,0000 ; 2487 J/STBTH1 ;GO TO STORE BOTH CASE
; 2488
; 2489 ;CASE 5 -- STORE DOUBLE AC
; 2490 1505:
; 2491 DAC: AC[1]_[ARX], ;STORE AC 1
U 1505, 1515,3440,0404,1174,4007,0700,0400,0000,1441 ; 2492 J/STAC ;GO STORE AC
; 2493
; 2494 ;CASE 6 -- STORE DOUBLE BOTH (KA10 STYLE MEM_AR ONLY)
; 2495 1506:
; 2496 STDBTH: MEM WRITE, ;WAIT FOR MEMORY
; 2497 MEM_[AR], ;STORE AR
U 1506, 1505,3333,0003,4175,5007,0701,0200,0000,0002 ; 2498 J/DAC ;NOW STORE AC & AC+1
; 2499
; 2500 ;CASE 7 -- RESERVED
; 2501 ;1507:
; 2502
; KS10.MCR[7,3] 15:03 7-JAN-1986 MICRO 31(254) KS10 MICROCODE V130, 7-JAN-86 Page 69
; SIMPLE.MIC[7,3] 16:49 11-NOV-1985 THE INSTRUCTION LOOP -- STORE ANSWERS
; 2503 ;CASE 10 -- RESERVED
; 2504 ;1510:
; 2505
; 2506 ;CASE 11 -- RESERVED
; 2507 ;1511:
; 2508
; 2509 ;CASE 12 -- RESERVED
;