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