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