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