; 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,7000 ; 2649 [AR]_-SIGN, RETURN [1] ;EXTEND - SIGN ; 2650 ; 2651 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 66 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 THE INSTRUCTION LOOP -- STORE ANSWERS ; 2652 .TOC "THE INSTRUCTION LOOP -- STORE ANSWERS" ; 2653 ; 2654 ;NOTE: INSTRUCTIONS WHICH STORE IN BOTH AC AND MEMORY ; 2655 ; (E.G. ADDB, AOS) MUST STORE IN MEMORY FIRST ; 2656 ; SO THAT IF A PAGE FAIL HAPPENS THE AC IS ; 2657 ; STILL INTACT. ; 2658 ; 2659 1500: ; 2660 BWRITE: ;BASE ADDRESS OF BWRITE DISPATCH ; 2661 ; 2662 ;CASE 0 -- RESERVED ; 2663 ;1500: ; 2664 ; 2665 ;CASE 1 -- RESERVED ; 2666 ;1501: ; 2667 ; 2668 ;CASE 2 -- RESERVED ; 2669 ;1502: ; 2670 ; 2671 ;CASE 3 -- RESERVED ; 2672 ;1503: ; 2673 ; 2674 ;CASE 4 -- STORE SELF ; 2675 1504: ; 2676 STSELF: SKIP IF AC0, ;IS AC # ZERO? U 1504, 0036,4443,0000,4174,4007,0360,0000,0000,0000 ; 2677 J/STBTH1 ;GO TO STORE BOTH CASE ; 2678 ; 2679 ;CASE 5 -- STORE DOUBLE AC ; 2680 1505: ; 2681 DAC: AC[1]_[ARX], ;STORE AC 1 U 1505, 1515,3440,0404,1174,4007,0700,0400,0000,1441 ; 2682 J/STAC ;GO STORE AC ; 2683 ; 2684 ;CASE 6 -- STORE DOUBLE BOTH (KA10 STYLE MEM_AR ONLY) ; 2685 1506: ; 2686 STDBTH: MEM WRITE, ;WAIT FOR MEMORY ; 2687 MEM_[AR], ;STORE AR U 1506, 1505,3333,0003,4175,5007,0701,0200,0000,0002 ; 2688 J/DAC ;NOW STORE AC & AC+1 ; 2689 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 67 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 THE INSTRUCTION LOOP -- STORE ANSWERS ; 2690 ; 2691 ;CASE 7 -- RESERVED ; 2692 ;1507: ; 2693 ; 2694 ;CASE 10 -- RESERVED ; 2695 ;1510: ; 2696 ; 2697 ;CASE 11 -- RESERVED ; 2698 ;1511: ; 2699 ; 2700 ;CASE 12 -- RESERVED ; 2701 ;1512: ; 2702 ; 2703 ;CASE 13 -- RESERVED ; 2704 ;1513: ; 2705 ; 2706 ;CASE 14 -- RESERVED ; 2707 1514: ; 2708 FL-BWRITE: ;THE NEXT 4 CASES ARE ALSO ; 2709 ;USED IN FLOATING POINT U 1514, 2404,4751,1217,4374,4007,0700,0000,0000,1000 ; 2710 HALT [BW14] ; 2711 ; 2712 ;CASE 15 -- STORE AC ; 2713 1515: ; 2714 STAC: AC_[AR], ;STORE AC U 1515, 0060,3440,0303,0174,4156,4700,0400,0000,0000 ; 2715 NEXT INST ;DO NEXT INSTRUCTION ; 2716 ; 2717 ;CASE 16 -- STORE IN MEMORY ; 2718 1516: ; 2719 STMEM: MEM WRITE, ;WAIT FOR MEMORY ; 2720 MEM_[AR], ;STORE AR U 1516, 1400,3333,0003,4175,5007,0701,0200,0000,0002 ; 2721 J/DONE ;START FETCH OF NEXT ; 2722 ; 2723 ;CASE 17 -- STORE BOTH ; 2724 1517: ; 2725 STBOTH: MEM WRITE, ;WAIT FOR MEMORY ; 2726 MEM_[AR], ;STORE AR U 1517, 1515,3333,0003,4175,5007,0701,0200,0000,0002 ; 2727 J/STAC ;NOW STORE AC ; 2728 ; 2729 =0 ; 2730 STBTH1: MEM WRITE, ;WAIT FOR MEMORY ; 2731 MEM_[AR], ;STORE AR U 0036, 1515,3333,0003,4175,5007,0701,0200,0000,0002 ; 2732 J/STAC ;NOW STORE AC ; 2733 STORE: MEM WRITE, ;WAIT FOR MEMORY ; 2734 MEM_[AR], ;STORE AC U 0037, 1400,3333,0003,4175,5007,0701,0200,0000,0002 ; 2735 J/DONE ;START NEXT INST ; 2736 ; 2737 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 68 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 MOVE GROUP ; 2738 .TOC "MOVE GROUP" ; 2739 ; 2740 .DCODE D 0200, 1015,1515,1100 ; 2741 200: R-PF, AC, J/STAC ;MOVE D 0201, 0015,1515,3000 ; 2742 I-PF, AC, J/STAC ;MOVEI D 0202, 0116,1404,0700 ; 2743 W, M, J/MOVE ;MOVEM D 0203, 0004,1504,1700 ; 2744 RW, S, J/STSELF ;MOVES ; 2745 D 0204, 1015,1402,1100 ; 2746 204: R-PF, AC, J/MOVS ;MOVS D 0205, 0015,1402,3000 ; 2747 I-PF, AC, J/MOVS ;MOVSI D 0206, 0116,1402,0700 ; 2748 W, M, J/MOVS ;MOVSM D 0207, 0004,1402,1700 ; 2749 RW, S, J/MOVS ;MOVSS ; 2750 D 0210, 1015,1405,1100 ; 2751 210: R-PF, AC, J/MOVN ;MOVN D 0211, 0015,1405,3000 ; 2752 I-PF, AC, J/MOVN ;MOVNI D 0212, 0116,1405,0700 ; 2753 W, M, J/MOVN ;MOVNM D 0213, 0004,1405,1700 ; 2754 RW, S, J/MOVN ;MOVNS ; 2755 D 0214, 1015,1403,1100 ; 2756 214: R-PF, AC, J/MOVM ;MOVM D 0215, 0015,1515,3000 ; 2757 I-PF, AC, J/STAC ;MOVMI D 0216, 0116,1403,0700 ; 2758 W, M, J/MOVM ;MOVMM D 0217, 0004,1403,1700 ; 2759 RW, S, J/MOVM ;MOVNS ; 2760 .UCODE ; 2761 ; 2762 1402: U 1402, 1500,3770,0303,4344,4003,7700,0200,0003,0001 ; 2763 MOVS: [AR]_[AR] SWAP,EXIT ; 2764 ; 2765 1403: U 1403, 1404,3333,0003,4174,4007,0520,0000,0000,0000 ; 2766 MOVM: READ [AR], SKIP DP0, J/MOVE ; 2767 ; 2768 1404: U 1404, 1500,4443,0000,4174,4003,7700,0200,0003,0001 ; 2769 MOVE: EXIT ; 2770 1405: ; 2771 MOVN: [AR]_-[AR], ;NEGATE NUMBER ; 2772 AD FLAGS, 3T, ;UPDATE FLAGS U 1405, 1404,2441,0303,4174,4467,0701,4000,0001,0001 ; 2773 J/MOVE ;STORE ANSWER ; 2774 ; 2775 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 69 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 EXCH ; 2776 .TOC "EXCH" ; 2777 ; 2778 .DCODE D 0250, 0015,1406,1500 ; 2779 250: R,W TEST, AC, J/EXCH ; 2780 .UCODE ; 2781 ; 2782 1406: ; 2783 EXCH: [BR]_AC, ;COPY AC TO THE BR U 1406, 1166,3771,0005,0276,6007,0700,0200,0003,0002 ; 2784 START WRITE ;START A WRITE CYCLE ; 2785 MEM WRITE, ;COMPLETE WRITE CYCLE ; 2786 MEM_[BR], ;STORE BR (AC) IN MEMORY U 1166, 1515,3333,0005,4175,5007,0701,0200,0000,0002 ; 2787 J/STAC ;STORE THE AR IN AC. NOTE: AR ; 2788 ; WAS LOADED WITH MEMORY OPERAND ; 2789 ; AS PART OF INSTRUCTION DISPATCH ; 2790 ; 2791 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 70 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 HALFWORD GROUP ; 2792 .TOC "HALFWORD GROUP" ; 2793 ; DESTINATION LEFT HALF ; 2794 ; 2795 .DCODE D 0500, 1015,1410,1100 ; 2796 500: R-PF, AC, J/HLL D 0501, 0015,1410,3000 ; 2797 I-PF, AC, J/HLL D 0502, 0016,1407,1700 ; 2798 RW, M, J/HRR ;HLLM = HRR EXCEPT FOR STORE D 0503, 0004,1404,1700 ; 2799 RW, S, J/MOVE ;HLLS = MOVES ; 2800 D 0504, 1015,1411,1100 ; 2801 R-PF, AC, J/HRL D 0505, 0015,1411,3000 ; 2802 I-PF, AC, J/HRL D 0506, 0016,1413,1700 ; 2803 RW, M, J/HRLM D 0507, 0004,1414,1700 ; 2804 RW, S, J/HRLS ; 2805 D 0510, 1015,1432,1100 ; 2806 510: R-PF, AC, J/HLLZ D 0511, 0015,1432,3000 ; 2807 I-PF, AC, J/HLLZ D 0512, 0116,1432,0700 ; 2808 W, M, J/HLLZ D 0513, 0004,1432,1700 ; 2809 RW, S, J/HLLZ ; 2810 D 0514, 1015,1424,1100 ; 2811 R-PF, AC, J/HRLZ D 0515, 0015,1424,3000 ; 2812 I-PF, AC, J/HRLZ D 0516, 0116,1424,0700 ; 2813 W, M, J/HRLZ D 0517, 0004,1424,1700 ; 2814 RW, S, J/HRLZ ; 2815 D 0520, 1015,1433,1100 ; 2816 520: R-PF, AC, J/HLLO D 0521, 0015,1433,3000 ; 2817 I-PF, AC, J/HLLO D 0522, 0116,1433,0700 ; 2818 W, M, J/HLLO D 0523, 0004,1433,1700 ; 2819 RW, S, J/HLLO ; 2820 D 0524, 1015,1425,1100 ; 2821 R-PF, AC, J/HRLO D 0525, 0015,1425,3000 ; 2822 I-PF, AC, J/HRLO D 0526, 0116,1425,0700 ; 2823 W, M, J/HRLO D 0527, 0004,1425,1700 ; 2824 RW, S, J/HRLO ; 2825 D 0530, 1015,1430,1100 ; 2826 530: R-PF, AC, J/HLLE D 0531, 0015,1430,3000 ; 2827 I-PF, AC, J/HLLE D 0532, 0116,1430,0700 ; 2828 W, M, J/HLLE D 0533, 0004,1430,1700 ; 2829 RW, S, J/HLLE ; 2830 D 0534, 1015,1422,1100 ; 2831 R-PF, AC, J/HRLE D 0535, 0015,1422,3000 ; 2832 I-PF, AC, J/HRLE D 0536, 0116,1422,0700 ; 2833 W, M, J/HRLE D 0537, 0004,1422,1700 ; 2834 RW, S, J/HRLE ; 2835 ; 2836 ; DESTINATION RIGHT HALF ; 2837 D 0540, 1015,1407,1100 ; 2838 540: R-PF, AC, J/HRR D 0541, 0015,1407,3000 ; 2839 I-PF, AC, J/HRR D 0542, 0016,1410,1700 ; 2840 RW, M, J/HLL ;HRRM = HLL EXCEPT FOR STORE D 0543, 0004,1404,1700 ; 2841 RW, S, J/MOVE ;HRRS = MOVES ; 2842 D 0544, 1015,1412,1100 ; 2843 R-PF, AC, J/HLR D 0545, 0015,1412,3000 ; 2844 I-PF, AC, J/HLR D 0546, 0016,1415,1700 ; 2845 RW, M, J/HLRM D 0547, 0004,1416,1700 ; 2846 RW, S, J/HLRS ; 2847 D 0550, 1015,1420,1100 ; 2848 550: R-PF, AC, J/HRRZ D 0551, 0015,1420,3000 ; 2849 I-PF, AC, J/HRRZ D 0552, 0116,1420,0700 ; 2850 W, M, J/HRRZ D 0553, 0004,1420,1700 ; 2851 RW, S, J/HRRZ ; 2852 D 0554, 1015,1426,1100 ; 2853 R-PF, AC, J/HLRZ D 0555, 0015,1426,3000 ; 2854 I-PF, AC, J/HLRZ D 0556, 0116,1426,0700 ; 2855 W, M, J/HLRZ D 0557, 0004,1426,1700 ; 2856 RW, S, J/HLRZ ; 2857 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 71 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 HALFWORD GROUP ; 2858 D 0560, 1015,1421,1100 ; 2859 560: R-PF, AC, J/HRRO D 0561, 0015,1421,3000 ; 2860 I-PF, AC, J/HRRO D 0562, 0116,1421,0700 ; 2861 W, M, J/HRRO D 0563, 0004,1421,1700 ; 2862 RW, S, J/HRRO ; 2863 D 0564, 1015,1427,1100 ; 2864 R-PF, AC, J/HLRO D 0565, 0015,1427,3000 ; 2865 I-PF, AC, J/HLRO D 0566, 0116,1427,0700 ; 2866 W, M, J/HLRO D 0567, 0004,1427,1700 ; 2867 RW, S, J/HLRO ; 2868 D 0570, 1015,1417,1100 ; 2869 570: R-PF, AC, J/HRRE D 0571, 0015,1417,3000 ; 2870 I-PF, AC, J/HRRE D 0572, 0116,1417,0700 ; 2871 W, M, J/HRRE D 0573, 0004,1417,1700 ; 2872 RW, S, J/HRRE ; 2873 D 0574, 1015,1423,1100 ; 2874 R-PF, AC, J/HLRE D 0575, 0015,1423,3000 ; 2875 I-PF, AC, J/HLRE D 0576, 0116,1423,0700 ; 2876 W, M, J/HLRE D 0577, 0004,1423,1700 ; 2877 RW, S, J/HLRE ; 2878 ; 2879 .UCODE ; 2880 ; 2881 ;FIRST THE GUYS THAT LEAVE THE OTHER HALF ALONE ; 2882 ; 2883 ;THE AR CONTAINS THE MEMORY OPERAND. SO WE WANT TO PUT THE LH OF ; 2884 ; AC INTO AR TO DO A HRR. OBVIOUS THING FOR HLL. ; 2885 1407: U 1407, 1500,3771,0003,0276,0003,7700,0200,0003,0001 ; 2886 HRR: [AR]_AC,HOLD RIGHT,EXIT ; 2887 1410: U 1410, 1500,3771,0003,0270,6003,7700,0200,0003,0001 ; 2888 HLL: [AR]_AC,HOLD LEFT,EXIT ; 2889 ; 2890 ;HRL FLOW: ; 2891 ;AT HRL AR CONTAINS: ; 2892 ; ; 2893 ; !------------------!------------------! ; 2894 ; ! LH OF (E) ! RH OF (E) ! ; 2895 ; !------------------!------------------! ; 2896 ; ; 2897 ;AR_AR SWAP GIVES: ; 2898 ; ; 2899 ; !------------------!------------------! ; 2900 ; ! RH OF (E) ! LH OF (E) ! ; 2901 ; !------------------!------------------! ; 2902 ; ; 2903 ;AT HLL, AR_AC,HOLD LEFT GIVES: ; 2904 ; ; 2905 ; !------------------!------------------! ; 2906 ; ! RH OF (E) ! RH OF AC ! ; 2907 ; !------------------!------------------! ; 2908 ; ; 2909 ;THE EXIT MACRO CAUSES THE AR TO BE STORED IN AC (AT STAC). ; 2910 ; THE REST OF THE HALF WORD IN THIS GROUP ARE VERY SIMILAR. ; 2911 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 72 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 HALFWORD GROUP ; 2912 ; 2913 1411: U 1411, 1410,3770,0303,4344,4007,0700,0000,0000,0000 ; 2914 HRL: [AR]_[AR] SWAP,J/HLL ; 2915 1412: U 1412, 1407,3770,0303,4344,4007,0700,0000,0000,0000 ; 2916 HLR: [AR]_[AR] SWAP,J/HRR ; 2917 ; 2918 1413: U 1413, 1202,3770,0303,4344,4007,0700,0000,0000,0000 ; 2919 HRLM: [AR]_[AR] SWAP U 1202, 1402,3771,0003,0270,6007,0700,0000,0000,0000 ; 2920 [AR]_AC,HOLD LEFT,J/MOVS ; 2921 1414: U 1414, 1500,3770,0303,4344,0003,7700,0200,0003,0001 ; 2922 HRLS: [AR]_[AR] SWAP,HOLD RIGHT,EXIT ; 2923 ; 2924 1415: U 1415, 1232,3770,0303,4344,4007,0700,0000,0000,0000 ; 2925 HLRM: [AR]_[AR] SWAP U 1232, 1402,3771,0003,0276,0007,0700,0000,0000,0000 ; 2926 [AR]_AC,HOLD RIGHT,J/MOVS ; 2927 1416: U 1416, 1500,3770,0303,4340,4003,7700,0200,0003,0001 ; 2928 HLRS: [AR]_[AR] SWAP,HOLD LEFT,EXIT ; 2929 ; 2930 ;NOW THE HALFWORD OPS WHICH CONTROL THE "OTHER" HALF. ; 2931 ; ENTER WITH 0,,E (E) OR (AC) IN AR ; 2932 ; 2933 1417: U 1417, 1420,3333,0003,4174,4007,0530,0000,0000,0000 ; 2934 HRRE: READ [AR],SKIP DP18 ; 2935 1420: U 1420, 1500,5731,0003,4174,4003,7700,0200,0003,0001 ; 2936 HRRZ: [AR] LEFT_0, EXIT ; 2937 1421: U 1421, 1500,5431,1203,4174,4003,7700,0200,0003,0001 ; 2938 HRRO: [AR] LEFT_-1, EXIT ; 2939 ; 2940 1422: U 1422, 1424,3333,0003,4174,4007,0530,0000,0000,0000 ; 2941 HRLE: READ [AR],SKIP DP18 ; 2942 1424: U 1424, 1402,3771,0003,4374,0007,0700,0000,0000,0000 ; 2943 HRLZ: [AR]_#,#/0,HOLD RIGHT,J/MOVS ; 2944 1425: U 1425, 1402,3771,0003,4374,0007,0700,0000,0077,7777 ; 2945 HRLO: [AR]_#,#/777777,HOLD RIGHT,J/MOVS ; 2946 ; 2947 1423: U 1423, 1426,3333,0003,4174,4007,0520,0000,0000,0000 ; 2948 HLRE: READ [AR],SKIP DP0 ; 2949 1426: U 1426, 1402,3771,0003,4370,4007,0700,0000,0000,0000 ; 2950 HLRZ: [AR]_#,#/0,HOLD LEFT,J/MOVS ; 2951 1427: U 1427, 1402,3771,0003,4370,4007,0700,0000,0077,7777 ; 2952 HLRO: [AR]_#,#/777777,HOLD LEFT,J/MOVS ; 2953 ; 2954 1430: U 1430, 1432,3333,0003,4174,4007,0520,0000,0000,0000 ; 2955 HLLE: READ [AR],SKIP DP0 ; 2956 1432: U 1432, 1500,5371,0003,4174,4003,7700,0200,0003,0001 ; 2957 HLLZ: [AR] RIGHT_0, EXIT ; 2958 1433: U 1433, 1500,5341,1203,4174,4003,7700,0200,0003,0001 ; 2959 HLLO: [AR] RIGHT_-1, EXIT ; 2960 ; 2961 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 73 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 DMOVE, DMOVN, DMOVEM, DMOVNM ; 2962 .TOC "DMOVE, DMOVN, DMOVEM, DMOVNM" ; 2963 ; 2964 .DCODE D 0120, 0205,1505,1100 ; 2965 120: DBL R, DAC, J/DAC D 0121, 0215,1434,1100 ; 2966 DBL R, AC, J/DMOVN ; 2967 .UCODE ; 2968 ; 2969 1434: U 1434, 2736,4551,0404,4374,0007,0700,0010,0037,7777 ; 2970 DMOVN: CLEAR ARX0, CALL [DBLNGA] U 1436, 1515,3440,0404,1174,4007,0700,0400,0000,1441 ; 2971 1436: AC[1]_[ARX], J/STAC ; 2972 ; 2973 .DCODE D 0124, 0300,1567,0100 ; 2974 124: DBL AC, J/DMOVN1 D 0125, 0100,1565,0500 ; 2975 W, J/DMOVNM ; 2976 .UCODE ; 2977 ; 2978 ; 2979 1565: U 1565, 2735,3771,0004,1276,6007,0701,0010,0000,1441 ; 2980 DMOVNM: [ARX]_AC[1],CALL [DBLNEG] ; 2981 1567: ; 2982 DMOVN1: [HR]+[ONE], ;GET E+1 ; 2983 LOAD VMA, ;PUT THAT IN VMA ; 2984 START WRITE, ;STORE IN E+1 U 1567, 1247,0113,0207,4174,4007,0700,0200,0003,0312 ; 2985 PXCT DATA ;DATA CYCLE U 1247, 1253,3333,0004,4175,5007,0701,0200,0000,0002 ; 2986 MEM WRITE, MEM_[ARX] ;STORE LOW WORD ; 2987 VMA_[HR], ;GET E ; 2988 LOAD VMA, ;SAVE IN VMA ; 2989 PXCT DATA, ;OPERAND STORE ; 2990 START WRITE, ;START MEM CYCLE U 1253, 0037,3443,0200,4174,4007,0700,0200,0003,0312 ; 2991 J/STORE ;GO STORE AR ; 2992 ; 2993 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 74 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 BOOLEAN GROUP ; 2994 .TOC "BOOLEAN GROUP" ; 2995 ; 2996 .DCODE D 0400, 0015,1441,3000 ; 2997 400: I-PF, AC, J/SETZ D 0401, 0015,1441,3000 ; 2998 I-PF, AC, J/SETZ D 0402, 0016,1441,2700 ; 2999 IW, M, J/SETZ D 0403, 0017,1441,2700 ; 3000 IW, B, J/SETZ ; 3001 .UCODE ; 3002 ; 3003 1441: U 1441, 1500,4221,0003,4174,4003,7700,0200,0003,0001 ; 3004 SETZ: [AR]_0, EXIT ; 3005 ; 3006 .DCODE D 0404, 1015,1442,1100 ; 3007 404: R-PF, AC, J/AND D 0405, 0015,1442,3000 ; 3008 I-PF, AC, J/AND D 0406, 0016,1442,1700 ; 3009 RW, M, J/AND D 0407, 0017,1442,1700 ; 3010 RW, B, J/AND ; 3011 .UCODE ; 3012 ; 3013 1442: U 1442, 1500,4551,0303,0274,4003,7700,0200,0003,0001 ; 3014 AND: [AR]_[AR].AND.AC,EXIT ; 3015 ; 3016 .DCODE D 0410, 1015,1443,1100 ; 3017 410: R-PF, AC, J/ANDCA D 0411, 0015,1443,3000 ; 3018 I-PF, AC, J/ANDCA D 0412, 0016,1443,1700 ; 3019 RW, M, J/ANDCA D 0413, 0017,1443,1700 ; 3020 RW, B, J/ANDCA ; 3021 .UCODE ; 3022 ; 3023 1443: U 1443, 1500,5551,0303,0274,4003,7700,0200,0003,0001 ; 3024 ANDCA: [AR]_[AR].AND.NOT.AC,EXIT ; 3025 ; 3026 .DCODE D 0414, 1015,1404,1100 ; 3027 414: R-PF, AC, J/MOVE ;SETM = MOVE D 0415, 0015,1404,3000 ; 3028 I-PF, AC, J/MOVE D 0416, 0016,1404,1700 ; 3029 RW, M, J/MOVE ;SETMM = NOP THAT WRITES MEMORY D 0417, 0017,1404,1700 ; 3030 RW, B, J/MOVE ;SETMB = MOVE THAT WRITES MEMORY ; 3031 D 0420, 1015,1444,1100 ; 3032 420: R-PF, AC, J/ANDCM D 0421, 0015,1444,3000 ; 3033 I-PF, AC, J/ANDCM D 0422, 0016,1444,1700 ; 3034 RW, M, J/ANDCM D 0423, 0017,1444,1700 ; 3035 RW, B, J/ANDCM ; 3036 .UCODE ; 3037 ; 3038 1444: U 1444, 1442,7441,0303,4174,4007,0700,0000,0000,0000 ; 3039 ANDCM: [AR]_.NOT.[AR],J/AND ; 3040 ; 3041 .DCODE D 0424, 0000,1400,1100 ; 3042 424: R, J/DONE D 0425, 0000,1400,2100 ; 3043 I, J/DONE D 0426, 0116,1404,0700 ; 3044 W, M, J/MOVE ;SETAM = MOVEM D 0427, 0116,1404,0700 ; 3045 W, M, J/MOVE ;SETAB, TOO ; 3046 .UCODE ; 3047 ; 3048 .DCODE D 0430, 1015,1445,1100 ; 3049 430: R-PF, AC, J/XOR D 0431, 0015,1445,3000 ; 3050 I-PF, AC, J/XOR D 0432, 0016,1445,1700 ; 3051 RW, M, J/XOR D 0433, 0017,1445,1700 ; 3052 RW, B, J/XOR ; 3053 .UCODE ; 3054 ; 3055 1445: U 1445, 1500,6551,0303,0274,4003,7700,0200,0003,0001 ; 3056 XOR: [AR]_[AR].XOR.AC,EXIT ; 3057 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 75 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 BOOLEAN GROUP ; 3058 ; 3059 .DCODE D 0434, 1015,1446,1100 ; 3060 434: R-PF, AC, J/IOR D 0435, 0015,1446,3000 ; 3061 I-PF, AC, J/IOR D 0436, 0016,1446,1700 ; 3062 RW, M, J/IOR D 0437, 0017,1446,1700 ; 3063 RW, B, J/IOR ; 3064 .UCODE ; 3065 ; 3066 1446: U 1446, 1500,3551,0303,0274,4003,7700,0200,0003,0001 ; 3067 IOR: [AR]_[AR].OR.AC,EXIT ; 3068 ; 3069 .DCODE D 0440, 1015,1447,1100 ; 3070 440: R-PF, AC, J/ANDCB D 0441, 0015,1447,3000 ; 3071 I-PF, AC, J/ANDCB D 0442, 0016,1447,1700 ; 3072 RW, M, J/ANDCB D 0443, 0017,1447,1700 ; 3073 RW, B, J/ANDCB ; 3074 .UCODE ; 3075 ; 3076 1447: U 1447, 1443,7441,0303,4174,4007,0700,0000,0000,0000 ; 3077 ANDCB: [AR]_.NOT.[AR],J/ANDCA ; 3078 ; 3079 .DCODE D 0444, 1015,1450,1100 ; 3080 444: R-PF, AC, J/EQV D 0445, 0015,1450,3000 ; 3081 I-PF, AC, J/EQV D 0446, 0016,1450,1700 ; 3082 RW, M, J/EQV D 0447, 0017,1450,1700 ; 3083 RW, B, J/EQV ; 3084 .UCODE ; 3085 ; 3086 1450: U 1450, 1500,7551,0303,0274,4003,7700,0200,0003,0001 ; 3087 EQV: [AR]_[AR].EQV.AC,EXIT ; 3088 ; 3089 .DCODE D 0450, 0015,1451,3000 ; 3090 450: I-PF, AC, J/SETCA D 0451, 0015,1451,3000 ; 3091 I-PF, AC, J/SETCA D 0452, 0016,1451,2700 ; 3092 IW, M, J/SETCA D 0453, 0017,1451,2700 ; 3093 IW, B, J/SETCA ; 3094 .UCODE ; 3095 ; 3096 1451: U 1451, 1500,7771,0003,0274,4003,7700,0200,0003,0001 ; 3097 SETCA: [AR]_.NOT.AC,EXIT ; 3098 ; 3099 .DCODE D 0454, 1015,1452,1100 ; 3100 454: R-PF, AC, J/ORCA D 0455, 0015,1452,3000 ; 3101 I-PF, AC, J/ORCA D 0456, 0016,1452,1700 ; 3102 RW, M, J/ORCA D 0457, 0017,1452,1700 ; 3103 RW, B, J/ORCA ; 3104 .UCODE ; 3105 ; 3106 1452: U 1452, 1273,7771,0005,0274,4007,0700,0000,0000,0000 ; 3107 ORCA: [BR]_.NOT.AC U 1273, 1500,3111,0503,4174,4003,7700,0200,0003,0001 ; 3108 [AR]_[AR].OR.[BR],EXIT ; 3109 ; 3110 .DCODE D 0460, 1015,1453,1100 ; 3111 460: R-PF, AC, J/SETCM D 0461, 0015,1453,3000 ; 3112 I-PF, AC, J/SETCM D 0462, 0016,1453,1700 ; 3113 RW, M, J/SETCM D 0463, 0017,1453,1700 ; 3114 RW, B, J/SETCM ; 3115 .UCODE ; 3116 ; 3117 1453: U 1453, 1500,7441,0303,4174,4003,7700,0200,0003,0001 ; 3118 SETCM: [AR]_.NOT.[AR],EXIT ; 3119 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 76 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 BOOLEAN GROUP ; 3120 ; 3121 .DCODE D 0464, 1015,1454,1100 ; 3122 464: R-PF, AC, J/ORCM D 0465, 0015,1454,3000 ; 3123 I-PF, AC, J/ORCM D 0466, 0016,1454,1700 ; 3124 RW, M, J/ORCM D 0467, 0017,1454,1700 ; 3125 RW, B, J/ORCM ; 3126 .UCODE ; 3127 ; 3128 1454: U 1454, 1446,7441,0303,4174,4007,0700,0000,0000,0000 ; 3129 ORCM: [AR]_.NOT.[AR],J/IOR ; 3130 ; 3131 .DCODE D 0470, 1015,1455,1100 ; 3132 470: R-PF, AC, J/ORCB D 0471, 0015,1455,3000 ; 3133 I-PF, AC, J/ORCB D 0472, 0016,1455,1700 ; 3134 RW, M, J/ORCB D 0473, 0017,1455,1700 ; 3135 RW, B, J/ORCB ; 3136 .UCODE ; 3137 ; 3138 1455: U 1455, 1453,4551,0303,0274,4007,0700,0000,0000,0000 ; 3139 ORCB: [AR]_[AR].AND.AC,J/SETCM ; 3140 ; 3141 .DCODE D 0474, 0015,1456,3000 ; 3142 474: I-PF, AC, J/SETO D 0475, 0015,1456,3000 ; 3143 I-PF, AC, J/SETO D 0476, 0016,1456,2700 ; 3144 IW, M, J/SETO D 0477, 0017,1456,2700 ; 3145 IW, B, J/SETO ; 3146 .UCODE ; 3147 ; 3148 1456: U 1456, 1500,2441,0703,4174,4003,7700,4200,0003,0001 ; 3149 SETO: [AR]_-[ONE], EXIT ; 3150 ; 3151 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 77 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ROTATES AND LOGICAL SHIFTS -- ROT, LSH, JFFO ; 3152 .TOC "ROTATES AND LOGICAL SHIFTS -- ROT, LSH, JFFO" ; 3153 ; 3154 .DCODE D 0240, 0400,1622,1000 ; 3155 240: SH, J/ASH D 0241, 0400,1632,1000 ; 3156 SH, J/ROT D 0242, 0400,1612,1000 ; 3157 SH, J/LSH D 0243, 0000,1462,2100 ; 3158 I, J/JFFO D 0244, 0000,1466,3000 ; 3159 I-PF, J/ASHC D 0245, 0500,1470,1000 ; 3160 245: SHC, J/ROTC D 0246, 0500,1464,1000 ; 3161 SHC, J/LSHC ; 3162 .IF/CIRC D 0247, 0000,1665,2100 ; 3163 I, J/CIRC ;That's whats in the DROM... ; 3164 .ENDIF/CIRC ; 3165 .UCODE ; 3166 ; 3167 ; 3168 ;HERE IS THE CODE FOR LOGICAL SHIFT. THE EFFECTIVE ADDRESS IS ; 3169 ; IN AR. ; 3170 1612: ; 3171 LSH: [AR]_AC, ;PICK UP AC ; 3172 FE_-FE-1, ;NEGATIVE SHIFT U 1612, 1314,3771,0003,0276,6007,0700,1000,0031,1777 ; 3173 J/LSHL ;SHIFT LEFT ; 3174 1613: [AR]_AC.AND.MASK, ;MAKE IT LOOK POSITIVE ; 3175 FE_FE+1, ;UNDO -1 AT SHIFT U 1613, 1324,4551,1203,0276,6007,0700,1000,0041,0001 ; 3176 J/ASHR ;GO SHIFT RIGHT ; 3177 ; 3178 LSHL: [AR]_[AR]*2, ;SHIFT LEFT U 1314, 1515,3445,0303,4174,4007,0700,1020,0041,0001 ; 3179 SHIFT, J/STAC ;FAST SHIFT & GO STORE AC ; 3180 ; 3181 ;HERE IS THE CODE FOR ARITHMETIC SHIFT. THE EFFECTIVE ADDRESS IS ; 3182 ; IN AR. ; 3183 ; 3184 ASH36 LEFT "[AR]_[AR]*2 LONG, ASHC, STEP SC, ASH AROV" ; 3185 ; 3186 1622: U 1622, 1435,4222,0000,4174,4007,0700,0000,0000,0000 ; 3187 ASH: Q_0, J/ASHL0 ;HARDWARE ONLY DOES ASHC ; 3188 1623: [AR]_AC, ;GET THE ARGUMENT U 1623, 1324,3771,0003,0276,6007,0700,1000,0041,0001 ; 3189 FE_FE+1 ;FE HAS NEGATIVE SHIFT COUNT ; 3190 ASHR: [AR]_[AR]*.5, ;SHIFT RIGHT ; 3191 ASH, SHIFT, ;FAST SHIFT U 1324, 1515,3447,0303,4174,4007,0700,1020,0041,0001 ; 3192 J/STAC ;STORE AC WHEN DONE ; 3193 ; 3194 ASHL0: [AR]_AC*.5, ;GET INTO 9 CHIPS U 1435, 0054,3777,0003,0274,4007,0631,2000,0060,0000 ; 3195 STEP SC ;SEE IF NULL SHIFT ; 3196 =0 U 0054, 0054,3444,0303,4174,4447,0630,2000,0060,0000 ; 3197 ASHL: ASH36 LEFT, J/ASHL ;SHIFT LEFT ; 3198 ;SLOW BECAUSE WE HAVE TO ; 3199 ; TEST FOR OVERFLOW ; 3200 U 0055, 1515,3445,0303,4174,4007,0700,0000,0000,0000 ; 3201 ASHX: [AR]_[AR]*2, J/STAC ;SHIFT BACK INTO 10 CHIPS ; 3202 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 78 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ROTATES AND LOGICAL SHIFTS -- ROT, LSH, JFFO ; 3203 ; 3204 ;HERE IS THE CODE FOR ROTATE. THE EFFECTIVE ADDRESS IS ; 3205 ; IN AR. ; 3206 1632: ; 3207 ROT: [AR]_AC*.5, ;PICK UP THE AC (& SHIFT) ; 3208 FE_-FE-1, ;NEGATIVE SHIFT COUNT U 1632, 1575,3777,0003,0274,4007,0701,1000,0031,1777 ; 3209 J/ROTL ;ROTATE LEFT ; 3210 1633: [AR]_AC*.5, ;PICK UP THE AC (& SHIFT) U 1633, 1463,3777,0003,0274,4007,0701,1000,0041,0001 ; 3211 FE_FE+1 ;NEGATIVE SHIFT COUNT U 1463, 1507,3447,0303,4174,4007,0700,0000,0000,0000 ; 3212 [AR]_[AR]*.5 ;PUT IN 9 DIPS ; 3213 [AR]_[AR]*.5, ;SHIFT RIGHT U 1507, 1564,3447,0303,4174,4037,0700,1020,0041,0001 ; 3214 ROT, SHIFT ;FAST SHIFT U 1564, 0055,3445,0303,4174,4007,0700,0000,0000,0000 ; 3215 ASHXX: [AR]_[AR]*2,J/ASHX ;SHIFT TO STD PLACE ; 3216 U 1575, 1617,3447,0303,4174,4007,0700,0000,0000,0000 ; 3217 ROTL: [AR]_[AR]*.5 ;PUT IN RIGHT 36-BITS ; 3218 [AR]_[AR]*2, ;ROTATE LEFT ; 3219 ROT, SHIFT, ;FAST SHIFT U 1617, 1564,3445,0303,4174,4037,0700,1020,0041,0001 ; 3220 J/ASHXX ;ALL DONE--SHIFT BACK ; 3221 ; 3222 1462: ; 3223 JFFO: [BR]_AC.AND.MASK, 4T, ;GET AC WITH NO SIGN U 1462, 0056,4551,1205,0276,6007,0622,0000,0000,0000 ; 3224 SKIP AD.EQ.0 ; EXTENSION. SKIP IF ; 3225 ; ZERO. ; 3226 =0 [PC]_[AR], ;NOT ZERO--JUMP ; 3227 LOAD VMA, FETCH, ;GET NEXT INST U 0056, 1645,3441,0301,4174,4007,0700,0200,0014,0012 ; 3228 J/JFFO1 ;ENTER LOOP U 0057, 1400,4223,0000,1174,4007,0700,0400,0000,1441 ; 3229 AC[1]_0, J/DONE ;ZERO--DONE ; 3230 U 1645, 0120,4443,0000,4174,4007,0700,1000,0071,1764 ; 3231 JFFO1: FE_-12. ;WHY -12.? WELL THE ; 3232 ; HARDWARE LOOKS AT ; 3233 ; BIT -2 SO THE FIRST ; 3234 ; 2 STEPS MOVE THE BR ; 3235 ; OVER. WE ALSO LOOK AT ; 3236 ; THE DATA BEFORE THE SHIFT ; 3237 ; SO WE END UP GOING 1 PLACE ; 3238 ; TOO MANY. THAT MEANS THE ; 3239 ; FE SHOULD START AT -3. ; 3240 ; HOWEVER, WE COUNT THE FE BY ; 3241 ; 4 (BECAUSE THE 2 LOW ORDER ; 3242 ; BITS DO NOT COME BACK) SO ; 3243 ; FE_-12. ; 3244 =0 ; 3245 JFFOL: [BR]_[BR]*2, ;SHIFT LEFT ; 3246 FE_FE+4, ;COUNT UP BIT NUMBER U 0120, 0120,3445,0505,4174,4007,0520,1000,0041,0004 ; 3247 SKIP DP0, J/JFFOL ;LOOP TILL WE FIND THE BIT U 0121, 1745,3777,0003,4334,4057,0700,0000,0041,0000 ; 3248 [AR]_FE ;GET ANSWER BACK U 1745, 2001,4251,0303,4374,4007,0700,0000,0000,0077 ; 3249 [AR]_[AR].AND.# CLR LH,#/77 ;MASK TO 1 COPY U 2001, 0060,3440,0303,1174,4156,4700,0400,0000,1441 ; 3250 AC[1]_[AR], NEXT INST ;STORE AND EXIT ; 3251 ; 3252 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 79 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ROTATES AND LOGICAL SHIFTS -- LSHC ; 3253 .TOC "ROTATES AND LOGICAL SHIFTS -- LSHC" ; 3254 ; 3255 ;SHIFT CONNECTIONS WHEN THE SPECIAL FUNCTION "LSHC" IS DONE: ; 3256 ; ; 3257 ; !-! !----!------------------------------------! ; 3258 ; !0!-->!0000! HIGH ORDER 36 BITS ! RAM FILE ; 3259 ; !-! !----!------------------------------------! ; 3260 ; ^ ; 3261 ; : ; 3262 ; .................................... ; 3263 ; : ; 3264 ; !----!------------------------------------! ; 3265 ; !0000! LOW ORDER 36 BITS ! Q-REGISTER ; 3266 ; !----!------------------------------------! ; 3267 ; ^ ; 3268 ; : ; 3269 ; !-! ; 3270 ; !0! ; 3271 ; !-! ; 3272 ; ; 3273 ; 3274 1464: U 1464, 0124,4443,0000,4174,4007,0630,2000,0060,0000 ; 3275 LSHC: STEP SC, J/LSHCL U 1465, 2004,3333,0003,4174,4007,0700,2000,0031,5777 ; 3276 1465: READ [AR], SC_-SHIFT-1 U 2004, 0122,4443,0000,4174,4007,0630,2000,0060,0000 ; 3277 STEP SC ; 3278 =0 U 0122, 0122,3446,0505,4174,4057,0630,2000,0060,0000 ; 3279 LSHCR: [BR]_[BR]*.5 LONG,STEP SC,LSHC,J/LSHCR U 0123, 2041,3444,0505,4174,4007,0700,0000,0000,0000 ; 3280 [BR]_[BR]*2 LONG,J/LSHCX ; 3281 ; 3282 =0 U 0124, 0124,3444,0505,4174,4057,0630,2000,0060,0000 ; 3283 LSHCL: [BR]_[BR]*2 LONG,LSHC,STEP SC,J/LSHCL U 0125, 2041,3444,0505,4174,4007,0700,0000,0000,0000 ; 3284 [BR]_[BR]*2 LONG U 2041, 2046,3444,0505,4174,4007,0700,0000,0000,0000 ; 3285 LSHCX: [BR]_[BR]*2 LONG U 2046, 2107,3440,0505,0174,4007,0700,0400,0000,0000 ; 3286 AC_[BR], J/ASHCQ1 ; 3287 ; 3288 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 80 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ROTATES AND LOGICAL SHIFTS -- ASHC ; 3289 .TOC "ROTATES AND LOGICAL SHIFTS -- ASHC" ; 3290 ; 3291 ; 3292 1466: ; 3293 ASHC: READ [AR], ;PUT AR ON DP ; 3294 SC_SHIFT, LOAD FE, ;PUT SHIFT IN BOTH SC AND FE U 1466, 0126,3333,0003,4174,4007,0330,3000,0041,4000 ; 3295 SKIP ADR.EQ.0 ;SEE IF NULL SHIFT ; 3296 =0 Q_AC[1], ;NOT NULL--GET LOW WORD U 0126, 2067,3772,0000,1275,5007,0701,0000,0000,1441 ; 3297 J/ASHC1 ;CONTINUE BELOW U 0127, 0060,4443,0000,4174,4156,4700,0000,0000,0000 ; 3298 NIDISP: NEXT INST ;NULL--ALL DONE ; 3299 ASHC1: [BR]_AC*.5 LONG, ;GET HIGH WORD ; 3300 ;AND SHIFT Q U 2067, 0130,3776,0005,0274,4007,0631,0000,0000,0000 ; 3301 SKIP/SC ;SEE WHICH DIRECTION ; 3302 =0 [BR]_[BR]*.5, ;ADJUST POSITION ; 3303 SC_FE+S#, S#/1776, ;SUBRTACT 2 FROM FE U 0130, 0134,3447,0505,4174,4007,0700,2000,0041,1776 ; 3304 J/ASHCL ;GO LEFT ; 3305 [BR]_[BR]*.5, ;ADJUST POSITION U 0131, 0132,3447,0505,4174,4007,0700,2000,0031,1776 ; 3306 SC_S#-FE, S#/1776 ;SC_-2-FE, SC_+# OF STEPS ; 3307 =0 ;HERE TO GO RIGHT ; 3308 ASHCR: [BR]_[BR]*.5 LONG, ;GO RIGHT ; 3309 ASHC, ;SET DATA PATHS FOR ASHC (SEE DPE1) U 0132, 0132,3446,0505,4174,4047,0630,2000,0060,0000 ; 3310 STEP SC, J/ASHCR ;COUNT THE STEP AND KEEP LOOPING ; 3311 [BR]_[BR]*2 LONG, ;PUT BACK WHERE IT GOES U 0133, 2077,3444,0505,4174,4047,0700,0000,0000,0000 ; 3312 ASHC, J/ASHCX ;COMPLETE INSTRUCTION ; 3313 ; 3314 =0 ; 3315 ASHCL: [BR]_[BR]*2 LONG, ;GO LEFT ; 3316 ASHC, ASH AROV, ;SEE IF OVERFLOW U 0134, 0134,3444,0505,4174,4447,0630,2000,0060,0000 ; 3317 STEP SC, J/ASHCL ;LOOP OVER ALL PLACES ; 3318 [BR]_[BR]*2 LONG, ;SHIFT BACK WHERE IT GOES U 0135, 2077,3444,0505,4174,4447,0700,0000,0000,0000 ; 3319 ASHC, ASH AROV ;CAN STILL OVERFLOW ; 3320 ASHCX: AC_[BR]+[BR], 3T, ;PUT BACK HIGH WORD U 2077, 0140,0113,0505,0174,4007,0521,0400,0000,0000 ; 3321 SKIP DP0 ;SEE HOW TO FIX LOW SIGN ; 3322 =0 Q_Q.AND.#, #/377777, ;POSITIVE, CLEAR LOW SIGN U 0140, 2107,4662,0000,4374,0007,0700,0000,0037,7777 ; 3323 HOLD RIGHT, J/ASHCQ1 ;GO STORE ANSWER ; 3324 Q_Q.OR.#, #/400000, ;NEGATIVE, SET LOW SIGN U 0141, 2107,3662,0000,4374,0007,0700,0000,0040,0000 ; 3325 HOLD RIGHT ;IN LEFT HALF U 2107, 0060,3223,0000,1174,4156,4700,0400,0000,1441 ; 3326 ASHCQ1: AC[1]_Q, NEXT INST ;PUT BACK Q AND EXIT ; 3327 ; 3328 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 81 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ROTATES AND LOGICAL SHIFTS -- ROTC ; 3329 .TOC "ROTATES AND LOGICAL SHIFTS -- ROTC" ; 3330 ; 3331 ;SHIFT CONNECTIONS WHEN THE SPECIAL FUNCTION "ROTC" IS DONE: ; 3332 ; ; 3333 ; !----!------------------------------------! ; 3334 ; .....>!0000! HIGH ORDER 36 BITS ! RAM FILE ; 3335 ; : !----!------------------------------------! ; 3336 ; : ^ ; 3337 ; : : ; 3338 ; : ............................................ ; 3339 ; : : ; 3340 ; : : !----!------------------------------------! ; 3341 ; : ..!0000! LOW ORDER 36 BITS ! Q-REGISTER ; 3342 ; : !----!------------------------------------! ; 3343 ; : ^ ; 3344 ; : : ; 3345 ; :..............................................: ; 3346 ; ; 3347 ; 3348 1470: U 1470, 0144,4443,0000,4174,4007,0630,2000,0060,0000 ; 3349 ROTC: STEP SC, J/ROTCL U 1471, 2246,3333,0003,4174,4007,0700,2000,0031,5777 ; 3350 1471: READ [AR], SC_-SHIFT-1 U 2246, 0142,4443,0000,4174,4007,0630,2000,0060,0000 ; 3351 STEP SC ; 3352 =0 U 0142, 0142,3446,0505,4174,4077,0630,2000,0060,0000 ; 3353 ROTCR: [BR]_[BR]*.5 LONG,STEP SC,ROTC,J/ROTCR U 0143, 2041,3444,0505,4174,4007,0700,0000,0000,0000 ; 3354 [BR]_[BR]*2 LONG,J/LSHCX ; 3355 ; 3356 =0 U 0144, 0144,3444,0505,4174,4077,0630,2000,0060,0000 ; 3357 ROTCL: [BR]_[BR]*2 LONG,ROTC,STEP SC,J/ROTCL ; 3358 [BR]_[BR]*2 LONG, U 0145, 2041,3444,0505,4174,4007,0700,0000,0000,0000 ; 3359 J/LSHCX ; 3360 ; 3361 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 82 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 CIRC ; 3362 .TOC "CIRC" ; 3363 ; 3364 .IF/CIRC ; 3365 ; 3366 1665: U 1665, 2257,3772,0000,1275,5007,0701,0000,0000,1441 ; 3367 CIRC: Q_AC[1] ;PUT LOW WORD IN Q U 2257, 2310,3776,0005,0274,4007,0701,0000,0000,0000 ; 3368 [BR]_AC*.5 LONG ;PUT AC IN BR & SHIFT BR!Q RIGHT U 2310, 2324,3446,0505,4174,4007,0700,0000,0000,0000 ; 3369 [BR]_[BR]*.5 LONG ;SHIFT BR!Q 1 MORE PLACE RIGHT ; 3370 READ [AR], ;LOOK AT EFFECTIVE ADDRESS ; 3371 SKIP DP18, ;SEE IF LEFT OR RIGHT U 2324, 0146,3333,0003,4174,4007,0530,2000,0041,5777 ; 3372 SC_SHIFT-1 ;PUT NUMBER OF PLACES TO SHIFT IN ; 3373 ; SC AND FE (ASSUMING LEFT SHIFT) U 0146, 0150,4443,0000,4174,4007,0630,2000,0060,0000 ; 3374 =0 STEP SC, J/CIRCL ;GO LEFT SHIFT U 0147, 2406,3333,0003,4174,4007,0700,2000,0031,5777 ; 3375 READ [AR], SC_-SHIFT-1 ;CORRECT FOR RIGHT SHIFT U 2406, 0152,4443,0000,4174,4007,0630,2000,0060,0000 ; 3376 STEP SC, J/CIRCR ;GO RIGHT SHIFT ; 3377 U 2425, 2427,3446,0505,4174,4077,0700,0000,0000,0000 ; 3378 CIRCLA: [BR]_[BR]*.5 LONG, ROTC ;BOTH WORDS RIGHT U 2427, 0150,3445,0505,4174,4037,0630,2000,0060,0000 ; 3379 [BR]_[BR]*2, ROT, STEP SC ;FIRST WORD LEFT, STEP ; 3380 =0 U 0150, 2425,3445,0505,4174,4037,0700,0000,0000,0000 ; 3381 CIRCL: [BR]_[BR]*2, ROT, J/CIRCLA ;FIRST WORD LEFT U 0151, 2041,3444,0505,4174,4007,0700,0000,0000,0000 ; 3382 [BR]_[BR]*2 LONG, J/LSHCX ;DONE ; 3383 U 2437, 2442,3444,0505,4174,4077,0700,0000,0000,0000 ; 3384 CIRCRA: [BR]_[BR]*2 LONG, ROTC ;BOTH WORDS LEFT U 2442, 0152,3447,0505,4174,4037,0630,2000,0060,0000 ; 3385 [BR]_[BR]*.5, ROT, STEP SC ;FIRST WORD RIGHT, STEP ; 3386 =0 U 0152, 2437,3447,0505,4174,4037,0700,0000,0000,0000 ; 3387 CIRCR: [BR]_[BR]*.5, ROT, J/CIRCRA ;FIRST WORD RIGHT U 0153, 2041,3444,0505,4174,4007,0700,0000,0000,0000 ; 3388 [BR]_[BR]*2 LONG, J/LSHCX ;DONE ; 3389 ; 3390 .ENDIF/CIRC ; 3391 ; 3392 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 83 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 TEST GROUP ; 3393 .TOC "TEST GROUP" ; 3394 ; 3395 .DCODE ; 3396 ; 3397 ;SPECIAL MACROS USED ONLY IN B-FIELD OF TEST INSTRUCTIONS ; 3398 TN- "B/4" ; 3399 TNE "B/0" ; 3400 WORD-TNE "B/10" ;USED IN TIOE ; 3401 TNA "B/0" ; 3402 TNN "B/4" ; 3403 WORD-TNN "B/14" ;USED IN TION ; 3404 TZ- "B/5" ; 3405 TZE "B/1" ; 3406 TZA "B/1" ; 3407 TZN "B/5" ; 3408 TC- "B/6" ; 3409 TCE "B/2" ; 3410 TCA "B/2" ; 3411 TCN "B/6" ; 3412 TO- "B/7" ; 3413 TOE "B/3" ; 3414 TOA "B/3" ; 3415 TON "B/7" ; 3416 D 0600, 0000,1400,2100 ; 3417 600: I, J/DONE ;TRN- IS NOP D 0601, 0000,1400,2100 ; 3418 I, J/DONE ;SO IS TLN- D 0602, 0000,1475,2100 ; 3419 I, TNE, J/TDXX D 0603, 0000,1474,2100 ; 3420 I, TNE, J/TSXX D 0604, 0000,1473,2100 ; 3421 I, TNA, J/TDX D 0605, 0000,1472,2100 ; 3422 I, TNA, J/TSX D 0606, 0004,1475,2100 ; 3423 I, TNN, J/TDXX D 0607, 0004,1474,2100 ; 3424 I, TNN, J/TSXX ; 3425 D 0610, 0000,1400,2100 ; 3426 610: I, J/DONE ;TDN- IS A NOP D 0611, 0000,1400,2100 ; 3427 I, J/DONE ;TSN- ALSO D 0612, 0000,1475,1100 ; 3428 R, TNE, J/TDXX D 0613, 0000,1474,1100 ; 3429 R, TNE, J/TSXX D 0614, 0000,1473,1100 ; 3430 R, TNA, J/TDX D 0615, 0000,1472,1100 ; 3431 R, TNA, J/TSX D 0616, 0004,1475,1100 ; 3432 R, TNN, J/TDXX D 0617, 0004,1474,1100 ; 3433 R, TNN, J/TSXX ; 3434 D 0620, 0005,1473,2100 ; 3435 620: I, TZ-, J/TDX D 0621, 0005,1472,2100 ; 3436 I, TZ-, J/TSX D 0622, 0001,1475,2100 ; 3437 I, TZE, J/TDXX D 0623, 0001,1474,2100 ; 3438 I, TZE, J/TSXX D 0624, 0001,1473,2100 ; 3439 I, TZA, J/TDX D 0625, 0001,1472,2100 ; 3440 I, TZA, J/TSX D 0626, 0005,1475,2100 ; 3441 I, TZN, J/TDXX D 0627, 0005,1474,2100 ; 3442 I, TZN, J/TSXX ; 3443 D 0630, 0005,1473,1100 ; 3444 630: R, TZ-, J/TDX D 0631, 0005,1472,1100 ; 3445 R, TZ-, J/TSX D 0632, 0001,1475,1100 ; 3446 R, TZE, J/TDXX D 0633, 0001,1474,1100 ; 3447 R, TZE, J/TSXX D 0634, 0001,1473,1100 ; 3448 R, TZA, J/TDX D 0635, 0001,1472,1100 ; 3449 R, TZA, J/TSX D 0636, 0005,1475,1100 ; 3450 R, TZN, J/TDXX D 0637, 0005,1474,1100 ; 3451 R, TZN, J/TSXX ; 3452 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 84 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 TEST GROUP ; 3453 D 0640, 0006,1473,2100 ; 3454 640: I, TC-, J/TDX D 0641, 0006,1472,2100 ; 3455 I, TC-, J/TSX D 0642, 0002,1475,2100 ; 3456 I, TCE, J/TDXX D 0643, 0002,1474,2100 ; 3457 I, TCE, J/TSXX D 0644, 0002,1473,2100 ; 3458 I, TCA, J/TDX D 0645, 0002,1472,2100 ; 3459 I, TCA, J/TSX D 0646, 0006,1475,2100 ; 3460 I, TCN, J/TDXX D 0647, 0006,1474,2100 ; 3461 I, TCN, J/TSXX ; 3462 D 0650, 0006,1473,1100 ; 3463 650: R, TC-, J/TDX D 0651, 0006,1472,1100 ; 3464 R, TC-, J/TSX D 0652, 0002,1475,1100 ; 3465 R, TCE, J/TDXX D 0653, 0002,1474,1100 ; 3466 R, TCE, J/TSXX D 0654, 0002,1473,1100 ; 3467 R, TCA, J/TDX D 0655, 0002,1472,1100 ; 3468 R, TCA, J/TSX D 0656, 0006,1475,1100 ; 3469 R, TCN, J/TDXX D 0657, 0006,1474,1100 ; 3470 R, TCN, J/TSXX D 0660, 0007,1473,2100 ; 3471 660: I, TO-, J/TDX D 0661, 0007,1472,2100 ; 3472 I, TO-, J/TSX D 0662, 0003,1475,2100 ; 3473 I, TOE, J/TDXX D 0663, 0003,1474,2100 ; 3474 I, TOE, J/TSXX D 0664, 0003,1473,2100 ; 3475 I, TOA, J/TDX D 0665, 0003,1472,2100 ; 3476 I, TOA, J/TSX D 0666, 0007,1475,2100 ; 3477 I, TON, J/TDXX D 0667, 0007,1474,2100 ; 3478 I, TON, J/TSXX ; 3479 D 0670, 0007,1473,1100 ; 3480 670: R, TO-, J/TDX D 0671, 0007,1472,1100 ; 3481 R, TO-, J/TSX D 0672, 0003,1475,1100 ; 3482 R, TOE, J/TDXX D 0673, 0003,1474,1100 ; 3483 R, TOE, J/TSXX D 0674, 0003,1473,1100 ; 3484 R, TOA, J/TDX D 0675, 0003,1472,1100 ; 3485 R, TOA, J/TSX D 0676, 0007,1475,1100 ; 3486 R, TON, J/TDXX D 0677, 0007,1474,1100 ; 3487 R, TON, J/TSXX ; 3488 ; 3489 .UCODE ; 3490 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 85 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 TEST GROUP ; 3491 ; 3492 ;THESE 64 INSTRUCTIONS ARE DECODED BY MASK MODE(IMMEDIATE OR MEMORY) ; 3493 ; IN THE A FIELD, DISPATCH TO HERE ON THE J FIELD, AND RE-DISPATCH ; 3494 ; FOR THE MODIFICATION ON THE B FIELD. ; 3495 ; 3496 ; ENTER WITH 0,E OR (E) IN AR, B FIELD BITS 2 AND 3 AS FOLLOWS: ; 3497 ; 0 0 NO MODIFICATION ; 3498 ; 0 1 0S ; 3499 ; 1 0 COMPLEMENT ; 3500 ; 1 1 ONES ; 3501 ; THIS ORDER HAS NO SIGNIFICANCE EXCEPT THAT IT CORRESPONDS TO THE ; 3502 ; ORDER OF INSTRUCTIONS AT TGROUP. ; 3503 ; 3504 ;THE BIT 1 OF THE B FIELD IS USED TO DETERMINE THE SENSE ; 3505 ; OF THE SKIP ; 3506 ; 1 SKIP IF AC.AND.MASK .NE. 0 (TXX- AND TXXN) ; 3507 ; 0 SKIP IF AC.AND.MASK .EQ. 0 (TXXA AND TXXE) ; 3508 ; 3509 ;BIT 0 IS UNUSED AND MUST BE ZERO ; 3510 ; 3511 ; 3512 1472: U 1472, 1473,3770,0303,4344,4007,0700,0000,0000,0000 ; 3513 TSX: [AR]_[AR] SWAP ;TSXX AND TLXX ; 3514 1473: U 1473, 0154,4221,0005,4174,4003,7700,0000,0000,0000 ; 3515 TDX: [BR]_0,TEST DISP ; ALWAYS AND NEVER SKIP CASES ; 3516 ; 3517 1474: U 1474, 1475,3770,0303,4344,4007,0700,0000,0000,0000 ; 3518 TSXX: [AR]_[AR] SWAP ;TSXE, TSXN, TLXE, TLXN ; 3519 1475: ; 3520 TDXX: [BR]_[AR].AND.AC, ;TDXE, TDXN, TRXE, TRXN U 1475, 0154,4551,0305,0274,4003,7700,0000,0000,0000 ; 3521 TEST DISP ; 3522 ; 3523 ;TEST DISP DOES AN 8 WAY BRANCH BASED ON THE B-FIELD OF DROM ; 3524 ; 3525 =1100 ; 3526 TEST-TABLE: ; 3527 ; 3528 ;CASE 0 & 4 -- TXNX U 0154, 1400,3333,0005,4174,4007,0571,0000,0000,0000 ; 3529 TXXX: READ [BR], TXXX TEST, 3T, J/DONE ; 3530 ; 3531 ;CASE 1 & 5 -- TXZ AND TXZX U 0155, 2444,7441,0303,4174,4007,0700,0000,0000,0000 ; 3532 [AR]_.NOT.[AR],J/TXZX ; 3533 ; 3534 ;CASE 2 & 6 -- TXC AND TXCX U 0156, 2446,6551,0303,0274,4007,0700,0000,0000,0000 ; 3535 [AR]_[AR].XOR.AC,J/TDONE ; 3536 ; 3537 ;CASE 3 & 7 -- TXO AND TXOX U 0157, 2446,3551,0303,0274,4007,0700,0000,0000,0000 ; 3538 [AR]_[AR].OR.AC,J/TDONE ; 3539 ; 3540 ;THE SPECIAL FUNCTION TXXX TEST CAUSES A MICROCODE SKIP IF ; 3541 ; AD.EQ.0 AND DROM B IS 0-3 OR AD.NE.0 AND DROM B IS 4-7. ; 3542 U 2444, 2446,4551,0303,0274,4007,0700,0000,0000,0000 ; 3543 TXZX: [AR]_[AR].AND.AC U 2446, 0154,3440,0303,0174,4007,0700,0400,0000,0000 ; 3544 TDONE: AC_[AR],J/TXXX ; 3545 ; READ BR,TXXX TEST,J/DONE ; 3546 ; 3547 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 86 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 COMPARE -- CAI, CAM ; 3548 .TOC "COMPARE -- CAI, CAM" ; 3549 ; 3550 .DCODE ; 3551 ; 3552 ;SPECIAL B-FIELD ENCODING USED BY SKIP-JUMP-COMPARE CLASS ; 3553 ; INSTRUCTIONS: ; 3554 ; 3555 SJC- "B/0" ;NEVER ; 3556 SJCL "B/1" ;LESS ; 3557 SJCE "B/2" ;EQUAL ; 3558 SJCLE "B/3" ;LESS EQUAL ; 3559 SJCA "B/4" ;ALWAYS ; 3560 SJCGE "B/5" ;GREATER THAN OR EQUAL ; 3561 SJCN "B/6" ;NOT EQUAL ; 3562 SJCG "B/7" ;GREATER ; 3563 ; 3564 .UCODE ; 3565 ; 3566 ;COMPARE TABLE ; 3567 =1000 ; 3568 SKIP-COMP-TABLE: ; 3569 ; 3570 ;CASE 0 -- NEVER U 0170, 0070,3443,0100,4174,4156,4700,0200,0014,0012 ; 3571 DONE ; 3572 ; 3573 ;CASE 1 -- LESS U 0171, 1400,3333,0003,4174,4007,0520,0000,0000,0000 ; 3574 READ [AR], SKIP DP0,J/DONE ; 3575 ; 3576 ;CASE 2 -- EQUAL U 0172, 1400,3333,0003,4174,4007,0621,0000,0000,0000 ; 3577 SKIPE: READ [AR], SKIP AD.EQ.0,J/DONE ; 3578 ; 3579 ;CASE 3 -- LESS OR EQUAL U 0173, 1400,3333,0003,4174,4007,0421,0000,0000,0000 ; 3580 READ [AR], SKIP AD.LE.0,J/DONE ; 3581 ; 3582 ;CASE 4 -- ALWAYS U 0174, 0070,0111,0701,4170,4156,4700,0200,0014,0012 ; 3583 VMA_[PC]+1, NEXT INST FETCH, FETCH ; 3584 ; 3585 ;CASE 5 -- GREATER THAN OR EQUAL U 0175, 0014,3333,0003,4174,4007,0520,0000,0000,0000 ; 3586 READ [AR], SKIP DP0,J/SKIP ; 3587 ; 3588 ;CASE 6 -- NOT EQUAL U 0176, 0014,3333,0003,4174,4007,0621,0000,0000,0000 ; 3589 READ [AR], SKIP AD.EQ.0,J/SKIP ; 3590 ; 3591 ;CASE 7 -- GREATER U 0177, 0014,3333,0003,4174,4007,0421,0000,0000,0000 ; 3592 READ [AR], SKIP AD.LE.0,J/SKIP ; 3593 ; 3594 .DCODE D 0300, 0000,1400,2100 ; 3595 300: I, SJC-, J/DONE ;CAI D 0301, 0001,1476,2100 ; 3596 I, SJCL, J/CAIM D 0302, 0002,1476,2100 ; 3597 I, SJCE, J/CAIM D 0303, 0003,1476,2100 ; 3598 I, SJCLE, J/CAIM D 0304, 0004,1476,2100 ; 3599 I, SJCA, J/CAIM D 0305, 0005,1476,2100 ; 3600 I, SJCGE, J/CAIM D 0306, 0006,1476,2100 ; 3601 I, SJCN, J/CAIM D 0307, 0007,1476,2100 ; 3602 I, SJCG, J/CAIM ; 3603 D 0310, 0000,1476,1100 ; 3604 310: R, SJC-, J/CAIM ;CAM D 0311, 0001,1476,1100 ; 3605 R, SJCL, J/CAIM D 0312, 0002,1476,1100 ; 3606 R, SJCE, J/CAIM D 0313, 0003,1476,1100 ; 3607 R, SJCLE, J/CAIM D 0314, 0004,1476,1100 ; 3608 R, SJCA, J/CAIM D 0315, 0005,1476,1100 ; 3609 R, SJCGE, J/CAIM D 0316, 0006,1476,1100 ; 3610 R, SJCN, J/CAIM D 0317, 0007,1476,1100 ; 3611 R, SJCG, J/CAIM ; 3612 .UCODE ; 3613 ; 3614 1476: U 1476, 0170,2551,0303,0274,4003,7701,4000,0000,0000 ; 3615 CAIM: [AR]_AC-[AR], 3T, SKIP-COMP DISP ; 3616 ; 3617 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 87 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ARITHMETIC SKIPS -- AOS, SOS, SKIP ; 3618 .TOC "ARITHMETIC SKIPS -- AOS, SOS, SKIP" ; 3619 ;ENTER WITH (E) IN AR ; 3620 ; 3621 .DCODE D 0330, 0000,1477,1100 ; 3622 330: R, SJC-, J/SKIPS ;NOT A NOP IF AC .NE. 0 D 0331, 0001,1477,1100 ; 3623 R, SJCL, J/SKIPS D 0332, 0002,1477,1100 ; 3624 R, SJCE, J/SKIPS D 0333, 0003,1477,1100 ; 3625 R, SJCLE, J/SKIPS D 0334, 0004,1477,1100 ; 3626 R, SJCA, J/SKIPS D 0335, 0005,1477,1100 ; 3627 R, SJCGE, J/SKIPS D 0336, 0006,1477,1100 ; 3628 R, SJCN, J/SKIPS D 0337, 0007,1477,1100 ; 3629 R, SJCG, J/SKIPS ; 3630 .UCODE ; 3631 ; 3632 1477: ; 3633 SKIPS: FIX [AR] SIGN, U 1477, 0160,3770,0303,4174,0007,0360,0000,0000,0000 ; 3634 SKIP IF AC0 U 0160, 0170,3440,0303,0174,4003,7700,0400,0000,0000 ; 3635 =0 AC_[AR],SKIP-COMP DISP U 0161, 0170,4443,0000,4174,4003,7700,0000,0000,0000 ; 3636 SKIP-COMP DISP ; 3637 ; 3638 .DCODE D 0350, 0000,1431,1500 ; 3639 350: RW, SJC-, J/AOS D 0351, 0001,1431,1500 ; 3640 RW, SJCL, J/AOS D 0352, 0002,1431,1500 ; 3641 RW, SJCE, J/AOS D 0353, 0003,1431,1500 ; 3642 RW, SJCLE, J/AOS D 0354, 0004,1431,1500 ; 3643 RW, SJCA, J/AOS D 0355, 0005,1431,1500 ; 3644 RW, SJCGE, J/AOS D 0356, 0006,1431,1500 ; 3645 RW, SJCN, J/AOS D 0357, 0007,1431,1500 ; 3646 RW, SJCG, J/AOS ; 3647 .UCODE ; 3648 ; 3649 1431: U 1431, 2522,0111,0703,4174,4467,0701,0000,0001,0001 ; 3650 AOS: [AR]_[AR]+1, 3T, AD FLAGS U 2522, 2550,4443,0000,4174,4007,0700,0200,0003,0002 ; 3651 XOS: START WRITE U 2550, 1477,3333,0003,4175,5007,0701,0200,0000,0002 ; 3652 MEM WRITE,MEM_[AR],J/SKIPS ; 3653 ; 3654 .DCODE D 0370, 0000,1437,1500 ; 3655 370: RW, SJC-, J/SOS D 0371, 0001,1437,1500 ; 3656 RW, SJCL, J/SOS D 0372, 0002,1437,1500 ; 3657 RW, SJCE, J/SOS D 0373, 0003,1437,1500 ; 3658 RW, SJCLE, J/SOS D 0374, 0004,1437,1500 ; 3659 RW, SJCA, J/SOS D 0375, 0005,1437,1500 ; 3660 RW, SJCGE, J/SOS D 0376, 0006,1437,1500 ; 3661 RW, SJCN, J/SOS D 0377, 0007,1437,1500 ; 3662 RW, SJCG, J/SOS ; 3663 .UCODE ; 3664 ; 3665 1437: U 1437, 2522,1111,0703,4174,4467,0701,4000,0001,0001 ; 3666 SOS: [AR]_[AR]-1, 3T, AD FLAGS, J/XOS ; 3667 ; 3668 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 88 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 CONDITIONAL JUMPS -- JUMP, AOJ, SOJ, AOBJ ; 3669 .TOC "CONDITIONAL JUMPS -- JUMP, AOJ, SOJ, AOBJ" ; 3670 ; ENTER WITH E IN AR ; 3671 ; 3672 =1000 ; 3673 JUMP-TABLE: ; 3674 ; 3675 ;CASE 0 -- NEVER U 0210, 0060,3440,0505,0174,4156,4700,0400,0000,0000 ; 3676 AC_[BR], NEXT INST ; 3677 ; 3678 ;CASE 1 -- LESS U 0211, 0162,3770,0505,0174,4007,0520,0400,0000,0000 ; 3679 AC_[BR] TEST, SKIP DP0, J/JUMP- ; 3680 ; 3681 ;CASE 2 -- EQUAL U 0212, 0162,3770,0505,0174,4007,0621,0400,0000,0000 ; 3682 AC_[BR] TEST, SKIP AD.EQ.0, J/JUMP- ; 3683 ; 3684 ;CASE 3 -- LESS THAN OR EQUAL U 0213, 0162,3770,0505,0174,4007,0421,0400,0000,0000 ; 3685 AC_[BR] TEST, SKIP AD.LE.0, J/JUMP- ; 3686 ; 3687 ;CASE 4 -- ALWAYS U 0214, 0164,3440,0505,0174,4007,0700,0400,0000,0000 ; 3688 JMPA: AC_[BR], J/JUMPA ; 3689 ; 3690 ;CASE 5 -- GREATER THAN OR EQUAL TO U 0215, 0164,3770,0505,0174,4007,0520,0400,0000,0000 ; 3691 AC_[BR] TEST, SKIP DP0, J/JUMPA ; 3692 ; 3693 ;CASE 6 -- NOT EQUAL U 0216, 0164,3770,0505,0174,4007,0621,0400,0000,0000 ; 3694 AC_[BR] TEST, SKIP AD.EQ.0, J/JUMPA ; 3695 ; 3696 ;CASE 7 -- GREATER U 0217, 0164,3770,0505,0174,4007,0421,0400,0000,0000 ; 3697 AC_[BR] TEST, SKIP AD.LE.0, J/JUMPA ; 3698 ; 3699 =0 U 0162, 0070,3443,0100,4174,4156,4700,0200,0014,0012 ; 3700 JUMP-: DONE U 0163, 0070,3441,0301,4170,4156,4700,0200,0014,0012 ; 3701 JUMPA ; 3702 ; 3703 =0 U 0164, 0070,3441,0301,4170,4156,4700,0200,0014,0012 ; 3704 JUMPA: JUMPA U 0165, 0070,3443,0100,4174,4156,4700,0200,0014,0012 ; 3705 DONE ; 3706 ; 3707 ; 3708 .DCODE D 0320, 0000,1400,2100 ; 3709 320: I, SJC-, J/DONE D 0321, 0001,1440,2100 ; 3710 I, SJCL, J/JUMP D 0322, 0002,1440,2100 ; 3711 I, SJCE, J/JUMP D 0323, 0003,1440,2100 ; 3712 I, SJCLE, J/JUMP D 0324, 0004,1520,2100 ; 3713 I, SJCA, J/JRST D 0325, 0005,1440,2100 ; 3714 I, SJCGE, J/JUMP D 0326, 0006,1440,2100 ; 3715 I, SJCN, J/JUMP D 0327, 0007,1440,2100 ; 3716 I, SJCG, J/JUMP ; 3717 .UCODE ; 3718 ; 3719 1440: U 1440, 0210,3771,0005,0276,6003,7700,0000,0000,0000 ; 3720 JUMP: [BR]_AC,JUMP DISP ; 3721 ; 3722 .DCODE D 0340, 0000,1611,3000 ; 3723 340: I-PF, SJC-, J/AOJ D 0341, 0001,1611,2100 ; 3724 I, SJCL, J/AOJ D 0342, 0002,1611,2100 ; 3725 I, SJCE, J/AOJ D 0343, 0003,1611,2100 ; 3726 I, SJCLE, J/AOJ D 0344, 0004,1611,2100 ; 3727 I, SJCA, J/AOJ D 0345, 0005,1611,2100 ; 3728 I, SJCGE, J/AOJ D 0346, 0006,1611,2100 ; 3729 I, SJCN, J/AOJ D 0347, 0007,1611,2100 ; 3730 I, SJCG, J/AOJ ; 3731 .UCODE ; 3732 ; 3733 1611: U 1611, 0210,0551,0705,0274,4463,7702,0000,0001,0001 ; 3734 AOJ: [BR]_AC+1, AD FLAGS, 4T, JUMP DISP ; 3735 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 89 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 CONDITIONAL JUMPS -- JUMP, AOJ, SOJ, AOBJ ; 3736 ; 3737 .DCODE D 0360, 0000,1542,3000 ; 3738 360: I-PF, SJC-, J/SOJ D 0361, 0001,1542,2100 ; 3739 I, SJCL, J/SOJ D 0362, 0002,1542,2100 ; 3740 I, SJCE, J/SOJ D 0363, 0003,1542,2100 ; 3741 I, SJCLE, J/SOJ D 0364, 0004,1542,2100 ; 3742 I, SJCA, J/SOJ D 0365, 0005,1542,2100 ; 3743 I, SJCGE, J/SOJ D 0366, 0006,1542,2100 ; 3744 I, SJCN, J/SOJ D 0367, 0007,1542,2100 ; 3745 I, SJCG, J/SOJ ; 3746 .UCODE ; 3747 ; 3748 1542: U 1542, 0210,2551,0705,0274,4463,7702,4000,0001,0001 ; 3749 SOJ: [BR]_AC-1, AD FLAGS, 4T, JUMP DISP ; 3750 ; 3751 .DCODE D 0252, 0005,1547,2100 ; 3752 252: I, SJCGE, J/AOBJ D 0253, 0001,1547,2100 ; 3753 I, SJCL, J/AOBJ ; 3754 .UCODE ; 3755 ; 3756 1547: ; 3757 AOBJ: [BR]_AC+1000001, ;ADD 1 TO BOTH HALF WORDS ; 3758 INH CRY18, 3T, ;NO CARRY INTO LEFT HALF U 1547, 0210,0551,1505,0274,4403,7701,0000,0000,0000 ; 3759 JUMP DISP ;HANDLE EITHER AOBJP OR AOBJN ; 3760 ; 3761 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 90 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 AC DECODE JUMPS -- JRST, JFCL ; 3762 .TOC "AC DECODE JUMPS -- JRST, JFCL" ; 3763 ; 3764 .DCODE D 0254, 0000,1520,6000 ; 3765 254: I,VMA/0, AC DISP, J/JRST ;DISPATCHES TO 1 OF 16 ; 3766 ; PLACES ON AC BITS D 0255, 0000,1540,2100 ; 3767 I, J/JFCL ; 3768 .UCODE ; 3769 ; 3770 ;JRST DISPATCHES TO ONE OF 16 LOC'NS ON AC BITS ; 3771 ; 3772 =0000 ; 3773 1520: U 1520, 0070,3441,0301,4170,4156,4700,0200,0014,0012 ; 3774 JRST: JUMPA ;(0) JRST 0, U 1521, 0070,3441,0301,4170,4156,4700,0200,0014,0012 ; 3775 1521: JUMPA ;(1) PORTAL IS SAME AS JRST ; 3776 1522: VMA_[PC]-1, START READ, ;(2) JRSTF U 1522, 0064,1113,0701,4170,4007,0700,4200,0004,0012 ; 3777 J/JRSTF U 1523, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 3778 1523: UUO ;(3) U 1524, 0200,4443,0000,4174,4007,0340,0000,0000,0000 ; 3779 1524: SKIP KERNEL, J/HALT ;(4) HALT ; 3780 1525: ; 3781 XJRSTF0: VMA_[AR], START READ, ;(5) XJRSTF U 1525, 2555,3443,0300,4174,4007,0700,0200,0004,0012 ; 3782 J/XJRSTF U 1526, 0240,4443,0000,4174,4007,0340,0000,0000,0000 ; 3783 1526: SKIP KERNEL, J/XJEN ;(6) XJEN U 1527, 0204,4443,0000,4174,4007,0340,0000,0000,0000 ; 3784 1527: SKIP KERNEL, J/XPCW ;(7) XPCW ; 3785 1530: VMA_[PC]-1, START READ, ;(10) U 1530, 0202,1113,0701,4170,4007,0040,4200,0004,0012 ; 3786 SKIP IO LEGAL, J/JRST10 U 1531, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 3787 1531: UUO ;(11) ; 3788 1532: VMA_[PC]-1, START READ, ;(12) JEN U 1532, 0220,1113,0701,4170,4007,0040,4200,0004,0012 ; 3789 SKIP IO LEGAL, J/JEN U 1533, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 3790 1533: UUO ;(13) U 1534, 0206,4443,0000,4174,4007,0340,0000,0000,0000 ; 3791 1534: SKIP KERNEL, J/SFM ;(14) SFM U 1535, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 3792 1535: UUO ;(15) U 1536, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 3793 1536: UUO ;(16) U 1537, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 3794 1537: UUO ;(17) ; 3795 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 91 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 AC DECODE JUMPS -- JRST, JFCL ; 3796 ; 3797 =0* ; 3798 JRSTF: MEM READ, ;WAIT FOR DATA ; 3799 [HR]_MEM, ;STICK IN HR ; 3800 LOAD INST EA, ;LOAD @ AND XR U 0064, 2551,3771,0002,4365,5217,0700,0210,0000,0002 ; 3801 CALL [JRST0] ;COMPUTE EA AGAIN U 0066, 0070,3441,0301,4170,4156,4700,0200,0014,0012 ; 3802 JUMPA ;JUMP ; 3803 U 2551, 0110,4443,0000,2174,4006,6700,0000,0000,0000 ; 3804 JRST0: EA MODE DISP ;WHAT TYPE OF EA? ; 3805 =100* ; 3806 .IF/1PROC ; 3807 [BR]_XR, ;INDEXED ; 3808 LOAD FLAGS, ;GET FLAGS FROM XR ; 3809 UPDATE USER, ;ALLOW USER TO SET U 0110, 2553,3771,0005,2274,4467,0700,0000,0001,0004 ; 3810 J/JRST2 ; 3811 ; 3812 [BR]_[HR], ;PLAIN ; 3813 LOAD FLAGS, ;LOAD FLAGS FROM INST ; 3814 UPDATE USER, ;ALLOW USER TO SET U 0112, 2553,3441,0205,4174,4467,0700,0000,0001,0004 ; 3815 J/JRST2 ; 3816 .IFNOT/1PROC ; 3817 READ XR, ;INDEXED ; 3818 LOAD FLAGS, ;GET FLAGS FROM XR ; 3819 UPDATE USER, ;ALLOW USER TO SET ; 3820 RETURN [2] ;ALL DONE ; 3821 ; 3822 READ [HR], ;PLAIN ; 3823 LOAD FLAGS, ;LOAD FLAGS FROM INST ; 3824 UPDATE USER, ;ALLOW USER TO SET ; 3825 RETURN [2] ;RETURN ; 3826 .ENDIF/1PROC ; 3827 [HR]_[HR]+XR, ;BOTH ; 3828 LOAD VMA, ;FETCH IND WORD ; 3829 START READ, ;START MEM CYCLE U 0114, 2552,0551,0202,2270,4007,0700,0200,0004,0012 ; 3830 J/JRST1 ;CONTINUE BELOW ; 3831 ; 3832 VMA_[HR], ;INDIRECT ; 3833 START READ, ;FETCH IND WORD ; 3834 PXCT EA, ;SETUP PXCT STUFF U 0116, 2552,3443,0200,4174,4007,0700,0200,0004,0112 ; 3835 J/JRST1 ;CONTINUE BELOW ; 3836 ; 3837 JRST1: MEM READ, ;WAIT FOR DATA ; 3838 [HR]_MEM, ;LOAD THE HR ; 3839 LOAD INST EA, ;LOAD @ AND XR U 2552, 2551,3771,0002,4365,5217,0700,0200,0000,0002 ; 3840 J/JRST0 ;LOOP BACK ; 3841 ; 3842 .IF/1PROC ;BR HAS PC FLAGS THAT WERE JUST LOADED U 2553, 0166,4553,0500,4374,4007,0321,0000,0000,1000 ; 3843 JRST2: TL [BR], OIPBIT/1 ;ARE WE TRYING TO ONE-PROCEED? U 0166, 0002,3551,1313,4374,0004,1700,0000,0000,1000 ; 3844 =0 [FLG]_[FLG].OR.#, FLG.1PROC/1, HOLD RIGHT, RETURN [2] U 0167, 0002,4443,0000,4174,4004,1700,0000,0000,0000 ; 3845 RETURN [2] ; 3846 .ENDIF/1PROC ; 3847 ; 3848 =0 U 0200, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 3849 HALT: UUO ;USER MODE U 0201, 2554,3441,0301,4174,4007,0700,0000,0000,0000 ; 3850 [PC]_[AR] ;EXEC MODE--CHANGE PC U 2554, 2404,4751,1217,4374,4007,0700,0000,0000,0001 ; 3851 HALT [HALT] ;HALT INSTRUCTION ; 3852 ; 3853 =0 U 0202, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 3854 JRST10: UUO U 0203, 0223,4443,0000,4174,4007,0700,0000,0000,0000 ; 3855 J/JEN2 ;DISMISS INTERRUPT ; 3856 =0000 U 0220, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 3857 JEN: UUO ; FLAGS ; 3858 MEM READ, ; 3859 [HR]_MEM, ;GET INST ; 3860 LOAD INST EA, ;LOAD XR & @ U 0221, 2551,3771,0002,4365,5217,0700,0210,0000,0002 ; 3861 CALL [JRST0] ;COMPUTE FLAGS ; 3862 =0011 U 0223, 2340,4553,1400,4374,4007,0331,0010,0007,7400 ; 3863 JEN2: DISMISS ;DISMISS INTERRUPT U 0227, 3473,3770,1416,4344,4007,0700,0010,0000,0000 ; 3864 =0111 CALL LOAD PI ;RELOAD PI HARDWARE U 0237, 0070,3441,0301,4170,4156,4700,0200,0014,0012 ; 3865 =1111 JUMPA ;GO JUMP ; 3866 = ; 3867 ; 3868 1540: ; 3869 JFCL: JFCL FLAGS, ;ALL DONE IN HARDWARE ; 3870 SKIP JFCL, ;SEE IF SKIPS ; 3871 3T, ;ALLOW TIME U 1540, 0162,4443,0000,4174,4467,0551,0000,0001,0010 ; 3872 J/JUMP- ;JUMP IF WE SHOULD ; 3873 ; 3874 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 92 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 EXTENDED ADDRESSING INSTRUCTIONS ; 3875 .TOC "EXTENDED ADDRESSING INSTRUCTIONS" ; 3876 ; 3877 =0000 U 0240, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 3878 XJEN: UUO ;HERE IF USER MODE U 0241, 2340,4553,1400,4374,4007,0331,0010,0007,7400 ; 3879 DISMISS ;CLEAR HIGHEST INTERRUPT U 0245, 0255,3333,0012,4174,4437,0700,0000,0000,0000 ; 3880 =0101 READ [MASK], LOAD PI ;NO MORE INTERRUPTS ; 3881 =1101 ABORT MEM CYCLE, ;AVOID INTERRUPT PAGE FAIL U 0255, 1525,4223,0000,4364,4277,0700,0200,0000,0010 ; 3882 J/XJRSTF0 ;START READING FLAG WORD ; 3883 = ; 3884 U 2555, 2556,3771,0005,4365,5007,0700,0200,0000,0002 ; 3885 XJRSTF: MEM READ, [BR]_MEM ;PUT FLAGS IN BR ; 3886 [AR]_[AR]+1, ;INCREMENT ADDRESS ; 3887 LOAD VMA, ;PUT RESULT IN VMA U 2556, 2557,0111,0703,4174,4007,0700,0200,0004,0012 ; 3888 START READ ;START MEMORY ; 3889 MEM READ, [PC]_MEM, ;PUT DATA IN PC U 2557, 2560,3771,0001,4361,5007,0700,0200,0000,0002 ; 3890 HOLD LEFT ;IGNORE SECTION NUMBER ; 3891 READ [BR], LOAD FLAGS, ;LOAD NEW FLAGS U 2560, 2561,3333,0005,4174,4467,0700,0000,0001,0004 ; 3892 UPDATE USER ;SET BUT DON'T CLEAR USER FLAG ; 3893 PISET: [FLG]_[FLG].AND.NOT.#, ;CLEAR PI CYCLE ; 3894 FLG.PI/1, HOLD RIGHT, ;RELOAD PI HARDWARE U 2561, 2301,5551,1313,4374,0007,0700,0000,0001,0000 ; 3895 J/PIEXIT ; IN CASE THIS IS AN ; 3896 ; INTERRUPT INSTRUCTION ; 3897 ; 3898 =0 U 0204, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 3899 XPCW: UUO ;USER MODE U 0205, 0230,4521,1205,4074,4007,0700,0000,0000,0000 ; 3900 [BR]_FLAGS ;PUT FLAGS IN BR ; 3901 =0*0 ; 3902 PIXPCW: VMA_[AR], START WRITE, ;STORE FLAGS U 0230, 3554,3443,0300,4174,4007,0700,0210,0003,0012 ; 3903 CALL [STOBR] ;PUT BR IN MEMORY ; 3904 =1*0 VMA_[AR]+1, LOAD VMA, ; 3905 START WRITE, ;PREPEARE TO STORE PC U 0234, 3555,0111,0703,4170,4007,0700,0210,0003,0012 ; 3906 CALL [STOPC] ;PUT PC IN MEMORY ; 3907 =1*1 [AR]_[AR]+1, ;DO NEW PC PART U 0235, 2555,0111,0703,4174,4007,0700,0200,0004,0002 ; 3908 START READ, J/XJRSTF ; 3909 = ; 3910 ; 3911 =0 U 0206, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 3912 SFM: UUO U 0207, 2562,3443,0300,4174,4007,0700,0200,0003,0012 ; 3913 VMA_[AR], START WRITE ;STORE FLAGS U 2562, 0037,4521,1203,4074,4007,0700,0000,0000,0000 ; 3914 [AR]_FLAGS, J/STORE ;STORE AND EXIT ; 3915 ; 3916 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 93 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 XCT, XCTR, XCTRI ; 3917 .TOC "XCT, XCTR, XCTRI" ; 3918 ; 3919 .DCODE ; 3920 .IF/ITS D 0102, 0000,1662,2100 ; 3921 102: I, J/XCTRI D 0103, 0000,1663,2100 ; 3922 I, J/XCTR ; 3923 .ENDIF/ITS D 0256, 0000,1541,1100 ; 3924 256: R, J/XCT ;OPERAND FETCHED AS DATA ; 3925 .UCODE ; 3926 ; 3927 .IF/ITS ; 3928 1662: U 1662, 0224,4443,0000,4174,4007,0340,0000,0000,0000 ; 3929 XCTRI: SKIP KERNEL, J/XCTR1 ; 3930 1663: U 1663, 0224,4443,0000,4174,4007,0340,0000,0000,0000 ; 3931 XCTR: SKIP KERNEL, J/XCTR1 ; 3932 =0 U 0224, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 3933 XCTR1: UUO U 0225, 2563,3333,0002,4174,4167,0700,0200,0004,0002 ; 3934 READ [HR], LOAD PXCT, START READ U 2563, 1541,3771,0003,4365,5007,0700,0200,0000,0002 ; 3935 = MEM READ, [AR]_MEM, J/XCT ; 3936 ; 3937 1541: ; 3938 XCT: [HR]_[AR], ;STUFF INTO HR ; 3939 DBUS/DP, ;PLACE ON DBUS FOR IR ; 3940 LOAD INST, ;LOAD IR, AC, XR, ETC. U 1541, 2564,3441,0302,4174,4617,0700,0000,0000,0100 ; 3941 PXCT/E1 ;ALLOW XR TO BE PREVIOUS ; 3942 XCT1: WORK[YSAVE]_[HR] CLR LH,;SAVE FOR IO INSTRUCTIONS U 2564, 0722,4713,1202,7174,4007,0700,0400,0000,0422 ; 3943 J/XCT2 ;GO EXECUTE IT ; 3944 .IFNOT/ITS ; 3945 1541: ; 3946 XCT: SKIP KERNEL ;SEE IF MAY BE PXCT ; 3947 =0 ; 3948 XCT1A: [HR]_[AR], ;STUFF INTO HR ; 3949 DBUS/DP, ;PLACE ON DBUS FOR IR ; 3950 LOAD INST, ;LOAD IR, AC, XR, ETC. ; 3951 PXCT/E1, ;ALLOW XR TO BE PREVIOUS ; 3952 J/XCT1 ;CONTINUE BELOW ; 3953 READ [HR], ;LOAD PXCT FLAGS ; 3954 LOAD PXCT, ; .. ; 3955 J/XCT1A ;CONTINUE WITH NORMAL FLOW ; 3956 ; 3957 XCT1: WORK[YSAVE]_[HR] CLR LH,;SAVE FOR IO INSTRUCTIONS ; 3958 J/XCT2 ;GO EXECUTE IT ; 3959 .ENDIF/ITS ; 3960 ; 3961 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 94 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 STACK INSTRUCTIONS -- PUSHJ, PUSH, POP, POPJ ; 3962 .TOC "STACK INSTRUCTIONS -- PUSHJ, PUSH, POP, POPJ" ; 3963 ; 3964 .DCODE D 0260, 0000,1544,2100 ; 3965 260: I, B/0, J/PUSHJ D 0261, 0002,1543,3100 ; 3966 IR, B/2, J/PUSH D 0262, 0002,1545,2100 ; 3967 I, B/2, J/POP D 0263, 0000,1546,2100 ; 3968 I, J/POPJ ; 3969 .UCODE ; 3970 ; 3971 ;ALL START WITH E IN AR ; 3972 1543: ; 3973 PUSH: MEM READ, ;PUT MEMOP IN BR U 1543, 2565,3771,0005,4365,5007,0700,0200,0000,0002 ; 3974 [BR]_MEM ; .. ; 3975 PUSH1: [ARX]_AC+1000001, ;BUMP BOTH HALVES OF AC ; 3976 INH CRY18, ;NO CARRY ; 3977 LOAD VMA, ;START TO STORE ITEM ; 3978 START WRITE, ;START MEM CYCLE ; 3979 PXCT STACK WORD, ;THIS IS THE STACK DATA WORD ; 3980 3T, ;ALLOW TIME ; 3981 SKIP CRY0, ;GO TO STMAC, SKIP IF PDL OV U 2565, 0232,0551,1504,0274,4407,0311,0200,0003,0712 ; 3982 J/STMAC ; .. ; 3983 ; 3984 1544: ; 3985 PUSHJ: [BR]_PC WITH FLAGS, ;COMPUTE UPDATED FLAGS ; 3986 CLR FPD, ;CLEAR FIRST-PART-DONE U 1544, 2565,3741,0105,4074,4467,0700,0000,0005,0000 ; 3987 J/PUSH1 ; AND JOIN PUSH CODE ; 3988 ; 3989 =0 ; 3990 STMAC: MEM WRITE, ;WAIT FOR MEMORY ; 3991 MEM_[BR], ;STORE BR ON STACK ; 3992 B DISP, ;SEE IF PUSH OR PUSHJ U 0232, 0250,3333,0005,4175,5003,7701,0200,0000,0002 ; 3993 J/JSTAC ;BELOW ; 3994 ;WE MUST STORE THE STACK WORD PRIOR TO SETTING PDL OV IN CASE OF ; 3995 ; PAGE FAIL. ; 3996 MEM WRITE, ;WAIT FOR MEMORY U 0233, 2566,3333,0005,4175,5007,0701,0200,0000,0002 ; 3997 MEM_[BR] ;STORE BR ; 3998 SETPDL: SET PDL OV, ;OVERFLOW ; 3999 B DISP, ;SEE IF PUSH OR PUSHJ U 2566, 0250,4443,0000,4174,4463,7700,0000,0001,2000 ; 4000 J/JSTAC ;BELOW ; 4001 ; 4002 =00 ; 4003 JSTAC: [PC]_[AR], ;PUSHJ--LOAD PC ; 4004 LOAD VMA, ;LOAD ADDRESS U 0250, 0251,3441,0301,4174,4007,0700,0200,0014,0012 ; 4005 FETCH ;GET NEXT INST ; 4006 JSTAC1: AC_[ARX], ;STORE BACK STACK PTR U 0251, 0060,3440,0404,0174,4156,4700,0400,0000,0000 ; 4007 NEXT INST ;DO NEXT INST ; 4008 AC_[ARX], ;UPDATE STACK POINTER U 0252, 1400,3440,0404,0174,4007,0700,0400,0000,0000 ; 4009 J/DONE ;DO NEXT INST ; 4010 = ; 4011 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 95 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 STACK INSTRUCTIONS -- PUSHJ, PUSH, POP, POPJ ; 4012 ; 4013 1545: ; 4014 POP: [ARX]_AC, ;GET POINTER ; 4015 LOAD VMA, ;ADDRESS OF STACK WORD ; 4016 START READ, 3T, ;START CYCLE U 1545, 2567,3771,0004,0276,6007,0701,0200,0004,0712 ; 4017 PXCT STACK WORD ;FOR PXCT ; 4018 ; 4019 MEM READ, ;LOAD BR (QUIT IF PAGE FAIL) U 2567, 2570,3771,0005,4365,5007,0700,0200,0000,0002 ; 4020 [BR]_MEM ;STACK WORD TO BR ; 4021 ; 4022 [ARX]_[ARX]+#, ;UPDATE POINTER ; 4023 #/777777, ;-1 IN EACH HALF ; 4024 INH CRY18, 3T, ;BUT NO CARRY U 2570, 0242,0551,0404,4374,4407,0311,0000,0077,7777 ; 4025 SKIP CRY0 ;SEE IF OVERFLOW ; 4026 ; 4027 =0 VMA_[AR], ;EFFECTIVE ADDRESS ; 4028 PXCT DATA, ;FOR PXCT ; 4029 START WRITE, ;WHERE TO STORE RESULT U 0242, 2572,3443,0300,4174,4007,0700,0200,0003,0312 ; 4030 J/POPX1 ;OVERFLOW ; 4031 ; 4032 VMA_[AR], ;EFFECTIVE ADDRESS ; 4033 PXCT DATA, ;FOR PXCT U 0243, 2571,3443,0300,4174,4007,0700,0200,0003,0312 ; 4034 START WRITE ;WHERE TO STORE RESULT ; 4035 ; 4036 MEM WRITE, ;WAIT FOR MEM ; 4037 MEM_[BR], ;STORE BR ; 4038 B DISP, ;POP OR POPJ? U 2571, 0250,3333,0005,4175,5003,7701,0200,0000,0002 ; 4039 J/JSTAC ;STORE POINTER ; 4040 ; 4041 ; 4042 POPX1: MEM WRITE, ;WAIT FOR MEMORY ; 4043 MEM_[BR], ;STORE BR U 2572, 2566,3333,0005,4175,5007,0701,0200,0000,0002 ; 4044 J/SETPDL ;GO SET PDL OV ; 4045 ; 4046 1546: ; 4047 POPJ: [ARX]_AC, ;GET POINTER ; 4048 LOAD VMA, ;POINT TO STACK WORD ; 4049 PXCT STACK WORD, 3T, ;FOR PXCT U 1546, 2573,3771,0004,0276,6007,0701,0200,0004,0712 ; 4050 START READ ;START READ ; 4051 [ARX]_[ARX]+#, ;UPDATE POINTER ; 4052 #/777777, ;-1 IN BOTH HALFS ; 4053 INH CRY18, 3T, ;INHIBIT CARRY 18 U 2573, 0246,0551,0404,4374,4407,0311,0000,0077,7777 ; 4054 SKIP CRY0 ;SEE IF OVERFLOW U 0246, 0247,4443,0000,4174,4467,0700,0000,0001,2000 ; 4055 =0 SET PDL OV ;SET OVERFLOW ; 4056 MEM READ, [PC]_MEM, ;STICK DATA IN PC ; 4057 HOLD LEFT, ;NO FLAGS U 0247, 0251,3771,0001,4361,5007,0700,0200,0000,0002 ; 4058 J/JSTAC1 ;STORE POINTER ; 4059 ; 4060 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 96 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 STACK INSTRUCTIONS -- ADJSP ; 4061 .TOC "STACK INSTRUCTIONS -- ADJSP" ; 4062 ; 4063 .DCODE D 0105, 0000,1551,3000 ; 4064 105: I-PF, B/0, J/ADJSP ; 4065 .UCODE ; 4066 ; 4067 1551: ; 4068 ADJSP: [AR]_[AR] SWAP, ;MAKE 2 COPIES OF RH U 1551, 2574,3770,0303,4344,0007,0700,0000,0000,0000 ; 4069 HOLD RIGHT ; 4070 [BR]_AC, ;READ AC, SEE IF MINUS ; 4071 3T, U 2574, 0256,3771,0005,0276,6007,0521,0000,0000,0000 ; 4072 SKIP DP0 ; 4073 =0 AC_[BR]+[AR], ;UPDATE AC ; 4074 INH CRY18, ;NO CARRY ; 4075 SKIP DP0, ;SEE IF STILL OK ; 4076 3T, ;ALLOW TIME U 0256, 0260,0113,0503,0174,4407,0521,0400,0000,0000 ; 4077 J/ADJSP1 ;TEST FOR OFLO ; 4078 AC_[BR]+[AR], ;UPDATE AC ; 4079 INH CRY18, ;NO CARRY ; 4080 SKIP DP0, ;SEE IF STILL MINUS ; 4081 3T, ;ALLOW TIME FOR SKIP U 0257, 0262,0113,0503,0174,4407,0521,0400,0000,0000 ; 4082 J/ADJSP2 ;CONTINUE BELOW ; 4083 ; 4084 =0 U 0260, 0060,4443,0000,4174,4156,4700,0000,0000,0000 ; 4085 ADJSP1: NEXT INST ;NO OVERFLOW ; 4086 SET PDL OV, ;SET PDL OV U 0261, 0127,4443,0000,4174,4467,0700,0000,0001,2000 ; 4087 J/NIDISP ;GO DO NICOND DISP ; 4088 ; 4089 =0 ; 4090 ADJSP2: SET PDL OV, ;SET PDL OV U 0262, 0127,4443,0000,4174,4467,0700,0000,0001,2000 ; 4091 J/NIDISP ;GO DO NICOND DISP U 0263, 0060,4443,0000,4174,4156,4700,0000,0000,0000 ; 4092 NEXT INST ;NO OVERFLOW ; 4093 ; 4094 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 97 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 SUBROUTINE CALL/RETURN -- JSR, JSP, JSA, JRA ; 4095 .TOC "SUBROUTINE CALL/RETURN -- JSR, JSP, JSA, JRA" ; 4096 ; 4097 .DCODE D 0264, 0000,1552,2100 ; 4098 264: I, J/JSR D 0265, 0000,1550,2100 ; 4099 I, J/JSP D 0266, 0000,1554,2100 ; 4100 I, J/JSA D 0267, 0000,1555,2100 ; 4101 I, J/JRA ; 4102 .UCODE ; 4103 ; 4104 1550: U 1550, 2575,3741,0105,4074,4007,0700,0000,0000,0000 ; 4105 JSP: [BR]_PC WITH FLAGS ;GET PC WITH FLAGS ; 4106 CLR FPD, ;CLEAR FIRST-PART-DONE ; 4107 AC_[BR], ;STORE FLAGS U 2575, 0164,3440,0505,0174,4467,0700,0400,0005,0000 ; 4108 J/JUMPA ;GO JUMP ; 4109 ; 4110 1552: ; 4111 JSR: [BR]_PC WITH FLAGS, ;GET PC WITH FLAGS U 1552, 2576,3741,0105,4074,4467,0700,0000,0005,0000 ; 4112 CLR FPD ;CLEAR FIRST-PART-DONE ; 4113 VMA_[AR], ;EFFECTIVE ADDRESS U 2576, 2577,3443,0300,4174,4007,0700,0200,0003,0012 ; 4114 START WRITE ;STORE OLD PC WORD ; 4115 MEM WRITE, ;WAIT FOR MEMORY U 2577, 2600,3333,0005,4175,5007,0701,0200,0000,0002 ; 4116 MEM_[BR] ;STORE ; 4117 [PC]_[AR]+1000001, ;PC _ E+1 ; 4118 HOLD LEFT, ;NO JUNK IN LEFT ; 4119 3T, ;ALLOW TIME FOR DBM U 2600, 1400,0551,0301,4370,4007,0701,0000,0000,0001 ; 4120 J/DONE ;[127] START AT E+1 ; 4121 ;[127] MUST NICOND TO CLEAR TRAP CYCLE ; 4122 ; 4123 ; 4124 1554: ; 4125 JSA: [BR]_[AR], ;SAVE E U 1554, 2601,3441,0305,4174,4007,0700,0200,0003,0002 ; 4126 START WRITE ;START TO STORE U 2601, 0270,3770,0304,4344,4007,0700,0000,0000,0000 ; 4127 [ARX]_[AR] SWAP ;ARX LEFT _ E ; 4128 =0*0 [AR]_AC, ;GET OLD AC U 0270, 2743,3771,0003,0276,6007,0700,0010,0000,0000 ; 4129 CALL [IBPX] ;SAVE AR IN MEMORY ; 4130 =1*0 [ARX]_[PC], ;ARX NOW HAS E,,PC ; 4131 HOLD LEFT, ; .. U 0274, 3560,3441,0104,4170,4007,0700,0010,0000,0000 ; 4132 CALL [AC_ARX] ;GO PUT ARX IN AC ; 4133 =1*1 [PC]_[BR]+1000001, ;NEW PC ; 4134 3T, ;ALLOW TIME ; 4135 HOLD LEFT, ;NO JUNK IN PC LEFT U 0275, 1400,0551,0501,4370,4007,0701,0000,0000,0001 ; 4136 J/DONE ;[127] START AT E+1 ; 4137 ;[127] MUST NICOND TO CLEAR TRAP CYCLE ; 4138 = ; 4139 ; 4140 1555: U 1555, 2602,3771,0005,0276,6007,0700,0000,0000,0000 ; 4141 JRA: [BR]_AC ;GET AC U 2602, 2603,3770,0505,4344,4007,0700,0000,0000,0000 ; 4142 [BR]_[BR] SWAP ;OLD E IN BR RIGHT ; 4143 VMA_[BR], ;LOAD VMA U 2603, 2604,3443,0500,4174,4007,0700,0200,0004,0012 ; 4144 START READ ;FETCH SAVED AC ; 4145 MEM READ, ;WAIT FOR MEMORY ; 4146 [BR]_MEM, ;LOAD BR WITH SAVE AC U 2604, 0214,3771,0005,4365,5007,0700,0200,0000,0002 ; 4147 J/JMPA ;GO JUMP ; 4148 ; 4149 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 98 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ILLEGAL INSTRUCTIONS AND UUO'S ; 4150 .TOC "ILLEGAL INSTRUCTIONS AND UUO'S" ; 4151 ;LUUO'S TRAP TO CURRENT CONTEXT ; 4152 ; 4153 .DCODE D 0030, 0000,1557,2100 ; 4154 030: I, B/0, J/LUUO D 0031, 0001,1557,2100 ; 4155 I, B/1, J/LUUO D 0032, 0002,1557,2100 ; 4156 I, B/2, J/LUUO D 0033, 0003,1557,2100 ; 4157 I, B/3, J/LUUO D 0034, 0004,1557,2100 ; 4158 I, B/4, J/LUUO D 0035, 0005,1557,2100 ; 4159 I, B/5, J/LUUO D 0036, 0006,1557,2100 ; 4160 I, B/6, J/LUUO D 0037, 0007,1557,2100 ; 4161 I, B/7, J/LUUO ; 4162 ; 4163 ;MONITOR UUO'S -- TRAP TO EXEC ; 4164 D 0040, 0000,1556,2100 ; 4165 040: I, J/MUUO ;CALL D 0041, 0000,1556,2100 ; 4166 I, J/MUUO ;INIT D 0042, 0000,1556,2100 ; 4167 I, J/MUUO D 0043, 0000,1556,2100 ; 4168 I, J/MUUO D 0044, 0000,1556,2100 ; 4169 I, J/MUUO D 0045, 0000,1556,2100 ; 4170 I, J/MUUO D 0046, 0000,1556,2100 ; 4171 I, J/MUUO D 0047, 0000,1556,2100 ; 4172 I, J/MUUO ;CALLI D 0050, 0000,1556,2100 ; 4173 I, J/MUUO ;OPEN D 0051, 0000,1556,2100 ; 4174 I, J/MUUO ;TTCALL D 0052, 0000,1556,2100 ; 4175 I, J/MUUO D 0053, 0000,1556,2100 ; 4176 I, J/MUUO D 0054, 0000,1556,2100 ; 4177 I, J/MUUO D 0055, 0000,1556,2100 ; 4178 I, J/MUUO ;RENAME D 0056, 0000,1556,2100 ; 4179 I, J/MUUO ;IN D 0057, 0000,1556,2100 ; 4180 I, J/MUUO ;OUT D 0060, 0000,1556,2100 ; 4181 I, J/MUUO ;SETSTS D 0061, 0000,1556,2100 ; 4182 I, J/MUUO ;STATO D 0062, 0000,1556,2100 ; 4183 I, J/MUUO ;GETSTS D 0063, 0000,1556,2100 ; 4184 I, J/MUUO ;STATZ D 0064, 0000,1556,2100 ; 4185 I, J/MUUO ;INBUF D 0065, 0000,1556,2100 ; 4186 I, J/MUUO ;OUTBUF D 0066, 0000,1556,2100 ; 4187 I, J/MUUO ;INPUT D 0067, 0000,1556,2100 ; 4188 I, J/MUUO ;OUTPUT D 0070, 0000,1556,2100 ; 4189 I, J/MUUO ;CLOSE D 0071, 0000,1556,2100 ; 4190 I, J/MUUO ;RELEAS D 0072, 0000,1556,2100 ; 4191 I, J/MUUO ;MTAPE D 0073, 0000,1556,2100 ; 4192 I, J/MUUO ;UGETF D 0074, 0000,1556,2100 ; 4193 I, J/MUUO ;USETI D 0075, 0000,1556,2100 ; 4194 I, J/MUUO ;USETO D 0076, 0000,1556,2100 ; 4195 I, J/MUUO ;LOOKUP D 0077, 0000,1556,2100 ; 4196 I, J/MUUO ;ENTER ; 4197 ; 4198 ;EXPANSION OPCODES ; 4199 D 0100, 0000,1556,2100 ; 4200 100: I, J/UUO ;UJEN D 0101, 0000,1661,2100 ; 4201 I, J/UUO101 ; 4202 .IFNOT/ITS ; 4203 I, J/UUO102 ;XCTRI in ITS ; 4204 I, J/UUO103 ;XCTR in ITS ; 4205 .ENDIF/ITS ; 4206 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 99 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ILLEGAL INSTRUCTIONS AND UUO'S ; 4207 ; 4208 ;RESERVED OPCODES ; 4209 D 0000, 0000,1556,2100 ; 4210 000: I, J/UUO D 0104, 0000,1664,2100 ; 4211 104: I, J/JSYS ;JSYS D 0106, 0000,1666,2100 ; 4212 106: I, J/UUO106 D 0107, 0000,1667,2100 ; 4213 I, J/UUO107 D 0130, 0000,1660,2100 ; 4214 130: I, B/0, J/FP-LONG ;UFA D 0131, 0001,1660,2100 ; 4215 I, B/1, J/FP-LONG ;DFN D 0141, 0002,1660,2100 ; 4216 141: I, B/2, J/FP-LONG ;FADL D 0151, 0003,1660,2100 ; 4217 151: I, B/3, J/FP-LONG ;FSBL D 0161, 0004,1660,2100 ; 4218 161: I, B/4, J/FP-LONG ;FMPL D 0171, 0005,1660,2100 ; 4219 171: I, B/5, J/FP-LONG ;FDVL ; 4220 .IFNOT/CIRC ; 4221 247: I, J/UUO247 ;RESERVED ; 4222 .ENDIF/CIRC ; 4223 .UCODE ; 4224 ; 4225 1661: U 1661, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 4226 UUO101: UUO ; 4227 ; 4228 .IFNOT/ITS ; 4229 1662: ; 4230 UUO102: UUO ;XCTRI in ITS ; 4231 1663: ; 4232 UUO103: UUO ;XCTR in ITS ; 4233 .ENDIF/ITS ; 4234 ; 4235 1664: U 1664, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 4236 JSYS: UUO ; 4237 1666: U 1666, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 4238 UUO106: UUO ; 4239 1667: U 1667, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 4240 UUO107: UUO ; 4241 1660: U 1660, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 4242 FP-LONG:UUO ; 4243 .IFNOT/CIRC ; 4244 1665: ; 4245 UUO247: UUO ; 4246 .ENDIF/CIRC ; 4247 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 100 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ILLEGAL INSTRUCTIONS AND UUO'S ; 4248 ; 4249 ;HERE FOR UUO'S WHICH TRAP TO EXEC ; 4250 1556: ; 4251 UUO: ;THIS TAG IS USED FOR ILLEGAL THINGS WHICH DO UUO TRAPS ; 4252 MUUO: ;THIS TAG IS USED FOR MONITOR CALL INSTRUCTIONS ; 4253 [HR]_[HR].AND.#, ;MASK OUT @ AND XR ; 4254 #/777740, ;MASK U 1556, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 4255 HOLD RIGHT ;KEEP RIGHT ; 4256 ;THE UUO MACRO DOES THE ABOVE INSTRUCTION AND GOES TO UUOGO U 2605, 0264,4751,1204,4374,4007,0700,0000,0000,0424 ; 4257 UUOGO: [ARX]_0 XWD [424] ;HERE FROM UUO MACRO ; 4258 ;GET OFFSET TO UPT ; 4259 =0 [ARX]_[ARX]+[UBR], ;ADDRESS OF MUUO WORD U 0264, 3547,0111,1104,4174,4007,0700,0010,0000,0000 ; 4260 CALL [ABORT] ;STOP MEMORY ; 4261 READ [EBR], ;KL PAGING U 0265, 0266,3333,0010,4174,4007,0520,0000,0000,0000 ; 4262 SKIP DP0 ; ?? ; 4263 =0 READ [ARX], ;GET THE ADDRESS ; 4264 LOAD VMA, ;START WRITE ; 4265 VMA PHYSICAL WRITE, ;ABSOLUTE ADDRESS U 0266, 0310,3333,0004,4174,4007,0700,0200,0021,1016 ; 4266 J/KIMUUO ;GO STORE KI STYLE U 0267, 0272,3770,0203,4344,4007,0700,0000,0000,0000 ; 4267 [AR]_[HR] SWAP ;PUT IN RIGHT HALF ; 4268 =0 [AR]_FLAGS, ;FLAGS IN LEFT HALF ; 4269 HOLD RIGHT, ;JUST WANT FLAGS U 0272, 2613,4521,1203,4074,0007,0700,0010,0000,0000 ; 4270 CALL [UUOFLG] ;CLEAR TRAP FLAGS ; 4271 READ [ARX], ;LOOK AT ADDRESS ; 4272 LOAD VMA, ;LOAD THE VMA U 0273, 0074,3333,0004,4174,4007,0700,0200,0021,1016 ; 4273 VMA PHYSICAL WRITE ;STORE FLAG WORD ; 4274 =0* MEM WRITE, ;WAIT FOR MEMORY U 0074, 2614,3333,0003,4175,5007,0701,0210,0000,0002 ; 4275 MEM_[AR], CALL [NEXT] ;STORE ; 4276 MEM WRITE, ;WAIT FOR MEMORY U 0076, 0300,3333,0001,4175,5007,0701,0200,0000,0002 ; 4277 MEM_[PC] ;STORE FULL WORD PC ; 4278 =000 [HR]_0, ;SAVE E U 0300, 2614,4221,0002,4174,0007,0700,0010,0000,0000 ; 4279 HOLD RIGHT, CALL [NEXT] ;BUT CLEAR OPCODE ; 4280 =010 ; 4281 UUOPCW: MEM WRITE, ;WAIT FOR MEMORY ; 4282 MEM_[HR], ;STORE INSTRUCTION IN KI ; 4283 ; OR FULL WORD E IN KL U 0302, 3431,3333,0002,4175,5007,0701,0210,0000,0002 ; 4284 CALL [GETPCW] ;GET PROCESS-CONTEXT-WORD ; 4285 ; 4286 =011 NEXT [ARX] PHYSICAL WRITE, ;POINT TO NEXT WORD U 0303, 3554,0111,0704,4170,4007,0700,0210,0023,1016 ; 4287 CALL [STOBR] ;STORE PROCESS CONTEXT WORD ; 4288 ; 4289 ;NOW WE MUST PICK ONE OF 8 NEW PC WORDS BASED ON PC FLAGS U 0307, 2606,4751,1205,4374,4007,0700,0000,0000,0430 ; 4290 =111 [BR]_0 XWD [430] ;OFFSET INTO UPT ; 4291 = U 2606, 2607,0111,1105,4174,4007,0700,0000,0000,0000 ; 4292 [BR]_[BR]+[UBR] ;ADDRESS OF WORD U 2607, 2610,4521,1203,4074,4007,0700,0000,0000,0000 ; 4293 [AR]_FLAGS ;GET FLAGS ; 4294 TL [AR], ;LOOK AT FLAGS U 2610, 0276,4553,0300,4374,4007,0321,0000,0000,0600 ; 4295 #/600 ;TRAP SET? ; 4296 =0 [BR]_[BR].OR.#, ;YES--POINT TO TRAP CASE ; 4297 #/1, ; .. U 0276, 0277,3551,0505,4370,4007,0700,0000,0000,0001 ; 4298 HOLD LEFT ;LEAVE LEFT ALONE ; 4299 TL [AR], ;USER OR EXEC U 0277, 0304,4553,0300,4374,4007,0321,0000,0001,0000 ; 4300 #/10000 ; .. ; 4301 =0 [BR]_[BR].OR.#, ;USER ; 4302 #/4, ;POINT TO USER WORDS U 0304, 0305,3551,0505,4370,4007,0700,0000,0000,0004 ; 4303 HOLD LEFT ; 4304 READ [BR], ;LOOK AT ADDRESS ; 4305 LOAD VMA, ;PLACE IN VMA ; 4306 VMA PHYSICAL, ;PHYSICAL ADDRESS U 0305, 2611,3333,0005,4174,4007,0700,0200,0024,1016 ; 4307 START READ ;GET NEW PC WORD ; 4308 ;;Page fault delivering code joins in here. ; 4309 ;;J/EAPF1 DEC Paging ; 4310 ;;J/PFTRAP1 ITS Paging ; 4311 GOEXEC: MEM READ, ;WAIT FOR DATA U 2611, 2612,3771,0003,4365,5007,0700,0200,0000,0002 ; 4312 [AR]_MEM ;STICK IN AR ; 4313 READ [AR], ;LOOK AT DATA ; 4314 LOAD FLAGS, ;LOAD NEW FLAGS ; 4315 LEAVE USER, ;ALLOW USER TO LOAD ; 4316 LOAD PCU, ;SET PCU FROM USER U 2612, 0164,3333,0003,4174,4467,0700,0000,0000,0404 ; 4317 J/JUMPA ;JUMP ; 4318 ; 4319 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 101 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ILLEGAL INSTRUCTIONS AND UUO'S ; 4320 ; 4321 ;HERE FOR TOPS-10 STYLE PAGING ; 4322 ; 4323 =00 ; 4324 KIMUUO: MEM WRITE, ;STORE INSTRUCTION U 0310, 2614,3333,0002,4175,5007,0701,0210,0000,0002 ; 4325 MEM_[HR], CALL [NEXT] ;IN MEMORY ; 4326 =10 [AR]_PC WITH FLAGS, ;GET PC WORD U 0312, 2613,3741,0103,4074,4007,0700,0010,0000,0000 ; 4327 CALL [UUOFLG] ;CLEAR TRAP FLAGS ; 4328 =11 MEM WRITE, ;STORE PC WORD ; 4329 MEM_[AR], ; .. U 0313, 0302,3333,0003,4175,5007,0701,0200,0000,0002 ; 4330 J/UUOPCW ;GO STORE PROCESS CONTEXT ; 4331 ; 4332 UUOFLG: [AR]_[AR].AND.NOT.#, ;CLEAR TRAP FLAGS ; 4333 #/600, HOLD RIGHT, ; IN WORD TO SAVE U 2613, 0001,5551,0303,4374,0004,1700,0000,0000,0600 ; 4334 RETURN [1] ; BACK TO CALLER ; 4335 ; 4336 NEXT: NEXT [ARX] PHYSICAL WRITE, ;POINT TO NEXT WORD U 2614, 0002,0111,0704,4170,4004,1700,0200,0023,1016 ; 4337 RETURN [2] ; 4338 ; 4339 ;HERE FOR LUUO'S ; 4340 1557: U 1557, 0400,4751,1203,4374,4007,0700,0000,0000,0040 ; 4341 LUUO: [AR]_0 XWD [40] ;AR GET CONSTANT 40 ; 4342 ;THE LUUO MACRO DOES THE ABOVE INSTRUCTION AND GOES TO LUUO1 ; 4343 400: ;FOR SIMULATOR ; 4344 LUUO1: READ [AR], ;LOAD 40 INTO ; 4345 LOAD VMA, ; THE VMA AND U 0400, 2615,3333,0003,4174,4007,0700,0200,0003,0012 ; 4346 START WRITE ; PREPARE TO STORE ; 4347 [HR]_[HR].AND.#, ;CLEAR OUT INDEX AND @ ; 4348 #/777740, ; .. U 2615, 2616,4551,0202,4374,0007,0700,0000,0077,7740 ; 4349 HOLD RIGHT ; 4350 MEM WRITE, ;STORE LUUO IN 40 U 2616, 2617,3333,0002,4175,5007,0701,0200,0000,0002 ; 4351 MEM_[HR] ; 4352 VMA_[AR]+1, ;POINT TO 41 ; 4353 LOAD VMA, ;PUT 41 IN VMA ; 4354 START READ, ;START FETCH U 2617, 2375,0111,0703,4170,4007,0700,0200,0004,0012 ; 4355 J/CONT1 ;GO EXECUTE THE INSTRUCTION ; 4356 ; 4357 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 102 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ARITHMETIC -- ADD, SUB ; 4358 .TOC "ARITHMETIC -- ADD, SUB" ; 4359 ; 4360 .DCODE D 0270, 1015,1560,1100 ; 4361 270: R-PF, AC, J/ADD D 0271, 0015,1560,3000 ; 4362 I-PF, AC, J/ADD D 0272, 0016,1560,1700 ; 4363 RW, M, J/ADD D 0273, 0017,1560,1700 ; 4364 RW, B, J/ADD ; 4365 .UCODE ; 4366 ; 4367 1560: ; 4368 ADD: [AR]_[AR]+AC, ;DO THE ADD U 1560, 1500,0551,0303,0274,4463,7701,0200,0001,0001 ; 4369 AD FLAGS EXIT, 3T ;UPDATE CARRY FLAGS ; 4370 ;STORE ANSWER ; 4371 ;MISSES 3-TICKS BY 3 NS. ; 4372 ; 4373 ; 4374 .DCODE D 0274, 1015,1561,1100 ; 4375 274: R-PF, AC, J/SUB D 0275, 0015,1561,3000 ; 4376 I-PF, AC, J/SUB D 0276, 0016,1561,1700 ; 4377 RW, M, J/SUB D 0277, 0017,1561,1700 ; 4378 RW, B, J/SUB ; 4379 .UCODE ; 4380 ; 4381 1561: ; 4382 SUB: [AR]_AC-[AR], ;DO THE SUBTRACT U 1561, 1500,2551,0303,0274,4463,7701,4200,0001,0001 ; 4383 AD FLAGS EXIT, 3T ;UPDATE PC CARRY FLAGS ; 4384 ;ALL DONE ; 4385 ;MISSES 3-TICKS BY 3 NS. ; 4386 ; 4387 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 103 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ARITHMETIC -- DADD, DSUB ; 4388 .TOC "ARITHMETIC -- DADD, DSUB" ; 4389 ; 4390 .DCODE D 0114, 0205,1457,1100 ; 4391 114: DBL R, DAC, J/DADD D 0115, 0205,1615,1100 ; 4392 DBL R, DAC, J/DSUB ; 4393 .UCODE ; 4394 ; 4395 1457: ; 4396 DADD: [ARX]_[ARX]+AC[1], 4T, ;ADD LOW WORDS U 1457, 0314,0551,0404,1274,4007,0562,0000,0000,1441 ; 4397 SKIP CRY1 ;SEE IF CARRY TO HIGH WORD ; 4398 =0 ; 4399 DADD1: [AR]_[AR]+AC, ;ADD HIGH WORDS ; 4400 ADD .25, ;ADD IN ANY CARRY FROM LOW WORD ; 4401 AD FLAGS, 4T, ;UPDATE PC FLAGS U 0314, 2621,0551,0303,0274,4467,0702,4000,0001,0001 ; 4402 J/CPYSGN ;COPY SIGN TO LOW WORD U 0315, 2620,7441,1205,4174,4007,0700,0000,0000,0000 ; 4403 [BR]_.NOT.[MASK] ;SET BITS 35 AND 36 IN ; 4404 [AR]_[AR].OR.[BR], ; AR SO THAT ADD .25 WILL U 2620, 0314,3111,0503,4170,4007,0700,0000,0000,0000 ; 4405 HOLD LEFT, J/DADD1 ; ADD 1. ; 4406 ; 4407 1615: ; 4408 DSUB: [ARX]_AC[1]-[ARX], 4T, ;SUBTRACT LOW WORD U 1615, 0316,2551,0404,1274,4007,0562,4000,0000,1441 ; 4409 SKIP CRY1 ;SEE IF CARRY ; 4410 =0 [AR]_AC-[AR]-.25, ;NO CARRY ; 4411 AD FLAGS, 4T, ;UPDATE PC FLAGS U 0316, 2621,2551,0303,0274,4467,0702,0000,0001,0001 ; 4412 J/CPYSGN ;GO COPY SIGN ; 4413 [AR]_AC-[AR], 4T, ;THERE WAS A CARRY U 0317, 2621,2551,0303,0274,4467,0702,4000,0001,0001 ; 4414 AD FLAGS ;UPDATE CARRY FLAGS ; 4415 U 2621, 0320,3770,0303,4174,0007,0520,0000,0000,0000 ; 4416 CPYSGN: FIX [AR] SIGN, SKIP DP0 U 0320, 1404,4551,0404,4374,0007,0700,0000,0037,7777 ; 4417 =0 [ARX]_[ARX].AND.#, #/377777, HOLD RIGHT, J/MOVE U 0321, 1404,3551,0404,4374,0007,0700,0000,0040,0000 ; 4418 [ARX]_[ARX].OR.#, #/400000, HOLD RIGHT, J/MOVE ; 4419 ; 4420 ; 4421 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 104 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ARITHMETIC -- MUL, IMUL ; 4422 .TOC "ARITHMETIC -- MUL, IMUL" ; 4423 ; 4424 .DCODE D 0220, 1015,1641,1100 ; 4425 220: R-PF, AC, J/IMUL D 0221, 0015,1641,3000 ; 4426 I-PF, AC, J/IMUL D 0222, 0016,1641,1700 ; 4427 RW, M, J/IMUL D 0223, 0017,1641,1700 ; 4428 RW, B, J/IMUL ; 4429 .UCODE ; 4430 1641: U 1641, 2622,3441,0306,0174,4007,0700,0000,0000,0000 ; 4431 IMUL: [BRX]_[AR], AC ;COPY C(E) U 2622, 0100,3772,0000,0275,5007,0700,2000,0071,0043 ; 4432 Q_AC, SC_35. ;GET THE AC ; 4433 =0** [BRX]_[BRX]*.5 LONG, ;SHIFT RIGHT U 0100, 2646,3446,0606,4174,4007,0700,0010,0000,0000 ; 4434 CALL [MULSUB] ;MULTIPLY U 0104, 0322,3333,0004,4174,4007,0621,0000,0000,0000 ; 4435 READ [ARX], SKIP AD.EQ.0 ;SEE IF FITS U 0322, 2623,3445,0404,4174,4007,0700,0000,0000,0000 ; 4436 =0 [ARX]_[ARX]*2, J/IMUL2 ;NOT ZERO--SHIFT LEFT U 0323, 1500,3221,0003,4174,4003,7700,0200,0003,0001 ; 4437 IMUL1: [AR]_Q, EXIT ;POSITIVE ; 4438 ; 4439 IMUL2: [MASK].AND.NOT.[ARX], ;SEE IF ALL SIGN BITS U 2623, 0324,5113,0412,4174,4007,0621,0000,0000,0000 ; 4440 SKIP AD.EQ.0 ; .. ; 4441 =0 FIX [ARX] SIGN, ;NOT ALL SIGN BITS U 0324, 0326,3770,0404,4174,0007,0520,0000,0000,0000 ; 4442 SKIP DP0, J/IMUL3 ;GIVE + OR - OVERFLOW U 0325, 1500,7001,0003,4174,4003,7700,0200,0003,0001 ; 4443 [AR]_[MAG].EQV.Q, EXIT ;NEGATIVE ; 4444 =0 U 0326, 1404,3221,0003,4174,4467,0700,0000,0041,1000 ; 4445 IMUL3: [AR]_Q, SET AROV, J/MOVE U 0327, 1404,7001,0003,4174,4467,0700,0000,0041,1000 ; 4446 [AR]_[MAG].EQV.Q, SET AROV, J/MOVE ; 4447 ; 4448 ; 4449 .DCODE D 0224, 1005,1571,1100 ; 4450 224: R-PF, DAC, J/MUL D 0225, 0005,1571,3000 ; 4451 I-PF, DAC, J/MUL D 0226, 0016,1571,1700 ; 4452 RW, M, J/MUL D 0227, 0006,1571,1700 ; 4453 RW, DBL B, J/MUL ; 4454 .UCODE ; 4455 ; 4456 ; 4457 1571: U 1571, 2624,3442,0300,0174,4007,0700,0000,0000,0000 ; 4458 MUL: Q_[AR], AC ;COPY C(E) U 2624, 2625,3441,0316,4174,4007,0700,0000,0000,0000 ; 4459 [T0]_[AR] ;SAVE FOR OVERFLOW TEST U 2625, 0102,3771,0006,0276,6007,0700,2000,0071,0043 ; 4460 [BRX]_AC, SC_35. ;GET THE AC ; 4461 =0** [BRX]_[BRX]*.5 LONG, ;SHIFT OVER U 0102, 2646,3446,0606,4174,4007,0700,0010,0000,0000 ; 4462 CALL [MULSUB] ;MULTIPLY U 0106, 2626,3445,0403,4174,4007,0700,0000,0000,0000 ; 4463 [AR]_[ARX]*2 ;SHIFT OVER U 2626, 0330,3770,0303,4174,0007,0520,0000,0000,0000 ; 4464 FIX [AR] SIGN, SKIP DP0 ;SEE IF NEGATIVE ; 4465 =0 [ARX]_[MAG].AND.Q, ;POSITIVE U 0330, 1500,4001,0004,4174,4003,7700,0200,0003,0001 ; 4466 EXIT U 0331, 0332,4113,0616,4174,4007,0520,0000,0000,0000 ; 4467 [T0].AND.[BRX], SKIP DP0 ;TRIED TO SQUARE 1B0? U 0332, 1500,7001,0004,4174,4003,7700,0200,0003,0001 ; 4468 =0 [ARX]_[MAG].EQV.Q, EXIT ;NO ; 4469 [ARX]_[MAG].EQV.Q, ;YES U 0333, 1404,7001,0004,4174,4467,0700,0000,0041,1000 ; 4470 SET AROV, J/MOVE ; 4471 ; 4472 ; 4473 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 105 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ARITHMETIC -- DMUL ; 4474 .TOC "ARITHMETIC -- DMUL" ; 4475 ; 4476 .DCODE D 0116, 0205,1566,1100 ; 4477 116: DBL R, DAC, J/DMUL ; 4478 .UCODE ; 4479 ; 4480 .IF/FULL ; 4481 1566: U 1566, 2627,3447,0303,4174,4007,0700,0000,0000,0000 ; 4482 DMUL: [AR]_[AR]*.5 ;SHIFT MEM OPERAND RIGHT U 2627, 2630,4117,0004,4174,4007,0700,0000,0000,0000 ; 4483 [ARX]_([ARX].AND.[MAG])*.5 ; 4484 [BR]_[ARX], ;COPY LOW WORD U 2630, 0340,3441,0405,4174,4007,0350,0000,0000,0000 ; 4485 SKIP FPD ;SEE IF FIRST PART DONE ; 4486 ; ; 4487 ; BRX * BR ==> C(E+1) * C(AC+1) ; 4488 ; ; 4489 =000 [BRX]_(AC[1].AND.[MAG])*.5, 3T, ;GET LOW AC U 0340, 2642,4557,0006,1274,4007,0701,0010,0000,1441 ; 4490 CALL [DMULGO] ;START MULTIPLY ; 4491 [ARX]_(AC[2].AND.[MAG])*.5, 3T, ;FIRST PART DONE U 0341, 2632,4557,0004,1274,4007,0701,0000,0000,1442 ; 4492 J/DMUL1 ;GO DO SECOND PART U 0344, 0222,3223,0000,1174,4007,0700,0400,0000,1443 ; 4493 =100 AC[3]_Q ;SALT AWAY 1 WORD OF PRODUCT ; 4494 = ; 4495 ; ; 4496 ; BRX * Q ==> C(E) * C(AC+1) ; 4497 ; ; 4498 =0** Q_[AR], SC_35., ;GO MULT NEXT HUNK U 0222, 0351,3442,0300,4174,4007,0700,2010,0071,0043 ; 4499 CALL [QMULT] ; .. U 0226, 2631,3441,0416,4174,4007,0700,0000,0000,0000 ; 4500 [T0]_[ARX] ;SAVE PRODUCT ; 4501 AC[2]_Q, [ARX]_Q*.5, ;SAVE PRODUCT U 2631, 0342,3227,0004,1174,4007,0700,0400,0000,1442 ; 4502 J/DMUL2 ;GO DO HIGH HALF U 2632, 0342,3777,0016,1276,6007,0701,0000,0000,1441 ; 4503 DMUL1: [T0]_AC[1]*.5 ;RESTORE T0 ; 4504 =0*0 ; 4505 ; ; 4506 ; BRX * BR ==> C(AC) * C(E+1) ; 4507 ; ; 4508 DMUL2: [BRX]_AC*.5, ;PREPARE TO DO HIGH HALF U 0342, 2643,3777,0006,0274,4007,0701,0010,0000,0000 ; 4509 CALL [DBLMUL] ; GO DO IT ; 4510 AC[1]_[T0]*2, 3T, ;INTERRUPT, SAVE T0 U 0343, 2645,0113,1616,1174,4007,0701,0400,0000,1441 ; 4511 J/DMLINT ;SET FPD AND INTERRUPT U 0346, 2633,3223,0000,1174,4007,0700,0400,0000,1442 ; 4512 AC[2]_Q ;SAVE PRODUCT ; 4513 = U 2633, 0350,0111,1604,4174,4007,0700,0000,0000,0000 ; 4514 [ARX]_[ARX]+[T0] ;PREPARE FOR LAST MUL ; 4515 ; ; 4516 ; BRX * Q ==> C(AC) * C(E) ; 4517 ; ; 4518 =0** Q_[AR], SC_35., ;DO THE LAST MULTIPLY U 0350, 0351,3442,0300,4174,4007,0700,2010,0071,0043 ; 4519 CALL [QMULT] ; GO DO IT ; 4520 [ARX]_[ARX]*2, ;SHIFT BACK U 0354, 2634,3445,0404,4174,4467,0700,0000,0005,0000 ; 4521 CLR FPD ;CLEAR FPD ; 4522 U 2634, 0334,3770,0404,0174,4007,0520,0400,0000,0000 ; 4523 AC_[ARX] TEST, SKIP DP0 ;PUT BACK INTO AC U 0334, 2641,3223,0000,1174,4007,0700,0400,0000,1441 ; 4524 =0 AC[1]_Q, J/DMTRAP ;POSITIVE U 0335, 2635,7003,0000,1174,4007,0700,0400,0000,1441 ; 4525 AC[1]_[MAG].EQV.Q ;NEGATIVE U 2635, 2636,3772,0000,1275,5007,0701,0000,0000,1442 ; 4526 Q_AC[2] U 2636, 2637,7003,0000,1174,4007,0700,0400,0000,1442 ; 4527 AC[2]_[MAG].EQV.Q U 2637, 2640,3772,0000,1275,5007,0701,0000,0000,1443 ; 4528 Q_AC[3] U 2640, 2641,7003,0000,1174,4007,0700,0400,0000,1443 ; 4529 AC[3]_[MAG].EQV.Q ; 4530 DMTRAP: [AR]_PC WITH FLAGS, ;LOOK AT FLAGS U 2641, 0336,3741,0103,4074,4007,0520,0000,0000,0000 ; 4531 SKIP DP0 ;SEE IF AROV SET? U 0336, 0070,3443,0100,4174,4156,4700,0200,0014,0012 ; 4532 =0 DONE ;NO--ALL DONE U 0337, 1400,4443,0000,4174,4467,0700,0000,0041,1000 ; 4533 SET AROV, J/DONE ;YES--FORCE TRAP 1 ALSO ; 4534 ; 4535 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 106 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ARITHMETIC -- DMUL ; 4536 ; 4537 ;WAYS TO CALL MULTIPLY U 2642, 2643,4221,0004,4174,4007,0700,0000,0000,0000 ; 4538 DMULGO: [ARX]_0 ;CLEAR ARX U 2643, 2644,3442,0500,4174,4007,0700,2000,0071,0043 ; 4539 DBLMUL: Q_[BR], SC_35. U 2644, 0351,3447,0606,4174,4007,0700,0000,0000,0000 ; 4540 [BRX]_[BRX]*.5 ; 4541 =0** ; 4542 QMULT: Q_Q*.5, U 0351, 2650,3446,1200,4174,4007,0700,0010,0000,0000 ; 4543 CALL [MULTIPLY] ; 4544 [ARX]+[ARX], AD FLAGS, ;TEST FOR OVERFLOW U 0355, 0004,0113,0404,4174,4464,1701,0000,0001,0001 ; 4545 3T, RETURN [4] ;AND RETURN ; 4546 U 2645, 2507,4443,0000,4174,4467,0700,0000,0003,0000 ; 4547 DMLINT: SET FPD, J/FIXPC ;SET FPD, BACKUP PC ; 4548 ; INTERRUPT ; 4549 .IFNOT/FULL ; 4550 1566: ; 4551 DMUL: UUO ; 4552 .ENDIF/FULL ; 4553 ; 4554 ;MULTIPLY SUBROUTINE ; 4555 ;ENTERED WITH: ; 4556 ; MULTIPLIER IN Q ; 4557 ; MULTIPLICAND IN BRX ; 4558 ;RETURNS 4 WITH PRODUCT IN ARX!Q ; 4559 ; 4560 MUL STEP "A/BRX,B/ARX,DEST/Q_Q*.5,ASHC,STEP SC,MUL DISP" ; 4561 MUL FINAL "A/BRX,B/ARX,DEST/Q_Q*2" ; 4562 U 2646, 2647,3446,0606,4174,4007,0700,0000,0000,0000 ; 4563 MULSUB: [BRX]_[BRX]*.5 LONG ; 4564 MULSB1: [ARX]_0*.5 LONG, ;CLEAR ARX AND SHIFT Q ; 4565 STEP SC, ;COUNT FIRST STEP U 2647, 0352,4226,0004,4174,4007,0630,2000,0060,0000 ; 4566 J/MUL+ ;ENTER LOOP ; 4567 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 107 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ARITHMETIC -- DMUL ; 4568 ; 4569 ;MULTIPLY SUBROUTINE ; 4570 ;ENTERED WITH: ; 4571 ; MULTIPLIER IN Q ; 4572 ; MULTIPLICAND IN BRX ; 4573 ; PARTIAL PRODUCT IN ARX ; 4574 ;RETURNS 4 WITH Q*BRX+ARX IN ARX!Q ; 4575 ; 4576 MULTIPLY: ; 4577 Q_Q*.5, ;SHIFT Q ; 4578 STEP SC, ;COUNT FIRST STEP U 2650, 0352,3446,1200,4174,4007,0630,2000,0060,0000 ; 4579 J/MUL+ ;ENTER LOOP ; 4580 ; 4581 ;HERE FOR POSITIVE STEPS ; 4582 =010 ;0 IN A POSITIVE STEP ; 4583 MUL+: AD/B, ;DON'T ADD ; 4584 MUL STEP, ;SHIFT U 0352, 0352,3336,0604,4174,4046,2630,2000,0060,0000 ; 4585 J/MUL+ ;KEEP POSITIVE ; 4586 =011 ;DONE ; 4587 AD/B, ;DON'T ADD ; 4588 MUL FINAL, ;SHIFT U 0353, 0004,3334,0604,4174,4004,1700,0000,0000,0000 ; 4589 RETURN [4] ;SHIFT Q AND RETURN ; 4590 =110 ;1 IN A POSITIVE STEP ; 4591 AD/B-A-.25, ADD .25, ;SUBTRACT ; 4592 MUL STEP, ;SHIFT AND COUNT U 0356, 0362,1116,0604,4174,4046,2630,6000,0060,0000 ; 4593 J/MUL- ;NEGATIVE NOW ; 4594 =111 ;DONE ; 4595 AD/B-A-.25, ADD .25, ;SUBTRACT ; 4596 MUL FINAL, ;SHIFT U 0357, 0004,1114,0604,4174,4004,1700,4000,0000,0000 ; 4597 RETURN [4] ; AND RETURN ; 4598 ; 4599 ;HERE FOR NEGATIVE STEPS ; 4600 =010 ;0 IN NEGATIVE STEP ; 4601 MUL-: AD/A+B, ;ADD ; 4602 MUL STEP, ;SHIFT AND COUNT U 0362, 0352,0116,0604,4174,4046,2630,2000,0060,0000 ; 4603 J/MUL+ ;POSITIVE NOW ; 4604 =011 ;DONE ; 4605 AD/A+B, ;ADD ; 4606 MUL FINAL, ;SHIFT U 0363, 0004,0114,0604,4174,4004,1700,0000,0000,0000 ; 4607 RETURN [4] ;FIX Q AND RETURN ; 4608 =110 ;1 IN NEGATIVE STEP ; 4609 AD/B, ;DON'T ADD ; 4610 MUL STEP, ;SHIFT AND COUNT U 0366, 0362,3336,0604,4174,4046,2630,2000,0060,0000 ; 4611 J/MUL- ;STILL NEGATIVE ; 4612 =111 ;DONE ; 4613 AD/B, ;DON'T ADD ; 4614 MUL FINAL, ;SHIFT U 0367, 0004,3334,0604,4174,4004,1700,0000,0000,0000 ; 4615 RETURN [4] ;FIX Q AND RETURN ; 4616 ; 4617 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 108 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ARITHMETIC -- DIV, IDIV ; 4618 .TOC "ARITHMETIC -- DIV, IDIV" ; 4619 ; 4620 .DCODE D 0230, 1005,1600,1100 ; 4621 230: R-PF, DAC, J/IDIV D 0231, 0005,1600,3000 ; 4622 I-PF, DAC, J/IDIV D 0232, 0016,1600,1700 ; 4623 RW, M, J/IDIV D 0233, 0006,1600,1700 ; 4624 RW, DBL B, J/IDIV ; 4625 D 0234, 1005,1601,1100 ; 4626 234: R-PF, DAC, J/DIV D 0235, 0005,1601,3000 ; 4627 I-PF, DAC, J/DIV D 0236, 0016,1601,1700 ; 4628 RW, M, J/DIV D 0237, 0006,1601,1700 ; 4629 RW, DBL B, J/DIV ; 4630 .UCODE ; 4631 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 109 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ARITHMETIC -- DIV, IDIV ; 4632 ; 4633 1600: U 1600, 2651,3441,0305,0174,4007,0700,0000,0000,0000 ; 4634 IDIV: [BR]_[AR], AC ;COPY MEMORY OPERAND ; 4635 Q_AC, ;LOAD Q U 2651, 0360,3772,0000,0275,5007,0520,0000,0000,0000 ; 4636 SKIP DP0 ;SEE IF MINUS ; 4637 =0 [AR]_0, ;EXTEND + SIGN U 0360, 0371,4221,0003,4174,4007,0700,0000,0000,0000 ; 4638 J/DIV1 ;NOW SAME AS DIV ; 4639 [AR]_-1, ;EXTEND - SIGN U 0361, 0371,2441,0703,4174,4007,0700,4000,0000,0000 ; 4640 J/DIV1 ;SAME AS DIV ; 4641 ; 4642 1601: U 1601, 2652,3441,0305,4174,4007,0700,0000,0000,0000 ; 4643 DIV: [BR]_[AR] ;COPY MEM OPERAND U 2652, 2653,3771,0003,0276,6007,0700,0000,0000,0000 ; 4644 [AR]_AC ;GET AC U 2653, 2654,3772,0000,1275,5007,0701,0000,0000,1441 ; 4645 Q_AC[1] ;AND AC+1 ; 4646 READ [AR], ;TEST FOR NO DIVIDE U 2654, 0370,3333,0003,4174,4007,0621,0000,0000,0000 ; 4647 SKIP AD.EQ.0 ; 4648 =000 .NOT.[AR], ;SEE IF ALL SIGN BITS IN AR ; 4649 SKIP AD.EQ.0, ; .. U 0370, 0364,7443,0300,4174,4007,0621,0000,0000,0000 ; 4650 J/DIVA ;CONTINUE BELOW ; 4651 =001 ; 4652 DIV1: READ [BR], ;SEE IF DIVIDE BY U 0371, 0374,3333,0005,4174,4007,0621,0000,0000,0000 ; 4653 SKIP AD.EQ.0 ; ZERO ; 4654 =100 ; 4655 DIV2: SC_34., ;NOT ZERO--LOAD STEP COUNT U 0374, 0510,4443,0000,4174,4007,0700,2010,0071,0042 ; 4656 CALL [DIVSUB] ;DIVIDE U 0375, 0127,4443,0000,4174,4467,0700,0000,0051,1000 ; 4657 =101 NO DIVIDE ;DIVIDE BY ZERO ; 4658 =110 [ARX]_[AR], ;COPY REMAINDER U 0376, 0323,3441,0304,4174,4007,0700,0000,0000,0000 ; 4659 J/IMUL1 ;STORE ANSWER ; 4660 = ; 4661 ; 4662 ; 4663 =0 ; 4664 DIVA: [BRX]_[AR], ;HIGH WORD IS NOT SIGNS U 0364, 2655,3441,0306,4174,4007,0700,0000,0000,0000 ; 4665 J/DIVB ;GO TEST FOR NO DIVIDE ; 4666 READ [BR], ;ALL SIGN BITS ; 4667 SKIP AD.EQ.0, ;SEE IF ZERO DIVIDE U 0365, 0374,3333,0005,4174,4007,0621,0000,0000,0000 ; 4668 J/DIV2 ;BACK TO MAIN FLOW ; 4669 U 2655, 2656,3221,0004,4174,4007,0700,0000,0000,0000 ; 4670 DIVB: [ARX]_Q ;MAKE ABS VALUES ; 4671 READ [AR], ;SEE IF + U 2656, 0404,3333,0003,4174,4007,0520,0000,0000,0000 ; 4672 SKIP DP0 ; 4673 =00 READ [BR], ;SEE IF + ; 4674 SKIP DP0, U 0404, 0372,3333,0005,4174,4007,0520,0000,0000,0000 ; 4675 J/DIVC ;CONTINUE BELOW ; 4676 CLEAR [ARX]0, ;FLUSH DUPLICATE SIGN U 0405, 2737,4551,0404,4374,0007,0700,0010,0037,7777 ; 4677 CALL [DBLNG1] ;NEGATE AR!ARX ; 4678 =11 READ [BR], ;SEE IF TOO BIG ; 4679 SKIP DP0, U 0407, 0372,3333,0005,4174,4007,0520,0000,0000,0000 ; 4680 J/DIVC ; 4681 = ; 4682 =0 ; 4683 DIVC: [AR]-[BR], ;COMPUTE DIFFERENCE ; 4684 SKIP DP0, ;SEE IF IT GOES ; 4685 3T, ;ALLOW TIME U 0372, 0402,2113,0305,4174,4007,0521,4000,0000,0000 ; 4686 J/NODIV ;TEST ; 4687 [AR]+[BR], ; 4688 SKIP DP0, ;SAME TEST FOR -VE BR ; 4689 3T, U 0373, 0402,0113,0305,4174,4007,0521,0000,0000,0000 ; 4690 J/NODIV ; 4691 =0 U 0402, 0127,4443,0000,4174,4467,0700,0000,0051,1000 ; 4692 NODIV: NO DIVIDE ;TOO BIG ; 4693 [AR]_[BRX], ;FITS U 0403, 0371,3441,0603,4174,4007,0700,0000,0000,0000 ; 4694 J/DIV1 ;GO BACK AND DIVIDE ; 4695 ; 4696 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 110 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ARITHMETIC -- DDIV ; 4697 .TOC "ARITHMETIC -- DDIV" ; 4698 ; 4699 .DCODE D 0117, 0205,1627,1100 ; 4700 117: DBL R, DAC, J/DDIV ; 4701 .UCODE ; 4702 ; 4703 .IF/FULL ; 4704 1627: U 1627, 2657,4112,0400,4174,4007,0700,0000,0000,0000 ; 4705 DDIV: Q_[ARX].AND.[MAG] ;COPY LOW WORD ; 4706 [BR]_[AR]*.5, ;COPY MEMORY OPERAND U 2657, 0410,3447,0305,4174,4007,0421,0000,0000,0000 ; 4707 SKIP AD.LE.0 ;SEE IF POSITIVE ; 4708 =0 [BR]_[BR]*.5 LONG, ;POSITIVE U 0410, 0414,3446,0505,4174,4007,0700,0000,0000,0000 ; 4709 J/DDIV1 ;CONTINUE BELOW ; 4710 [BR]_[BR]*.5 LONG, ;NEGATIVE OR ZERO U 0411, 0412,3446,0505,4174,4007,0520,0000,0000,0000 ; 4711 SKIP DP0 ;SEE WHICH? ; 4712 =0 [MAG].AND.Q, ;SEE IF ALL ZERO U 0412, 0414,4003,0000,4174,4007,0621,0000,0000,0000 ; 4713 SKIP AD.EQ.0, J/DDIV1 ;CONTINUE BELOW U 0413, 2660,4751,1217,4374,4007,0700,0000,0000,0005 ; 4714 [T1]_0 XWD [5] ;NEGATE MEM OP ; 4715 Q_Q.OR.#, #/600000, ;SIGN EXTEND THE LOW U 2660, 2661,3662,0000,4374,0007,0700,0000,0060,0000 ; 4716 HOLD RIGHT ; WORD U 2661, 2662,2222,0000,4174,4007,0700,4000,0000,0000 ; 4717 Q_-Q ;MAKE Q POSITIVE ; 4718 [BR]_(-[BR]-.25)*.5 LONG, ;NEGATE HIGH WORD ; 4719 ASHC, MULTI PREC/1, ;USE CARRY FROM LOW WORD U 2662, 2664,2446,0505,4174,4047,0700,0040,0000,0000 ; 4720 J/DDIV3 ;CONTINUE BELOW ; 4721 =0 ; 4722 DDIV1: [BR]_[BR]*.5 LONG, ;SHIFT OVER 1 PLACE U 0414, 2663,3446,0505,4174,4047,0700,0000,0000,0000 ; 4723 ASHC, J/DDIV2 ;CONTINUE BELOW U 0415, 0127,4443,0000,4174,4467,0700,0000,0051,1000 ; 4724 NO DIVIDE ;DIVIDE BY ZERO U 2663, 2664,4751,1217,4374,4007,0700,0000,0000,0004 ; 4725 DDIV2: [T1]_0 XWD [4] ;MEM OPERAND IS POSITIVE U 2664, 2665,3221,0006,0174,4007,0700,0000,0000,0000 ; 4726 DDIV3: [BRX]_Q, AC ;COPY Q ; 4727 U 2665, 0416,3777,0003,0274,4007,0520,0000,0000,0000 ; 4728 [AR]_AC*.5, 2T, SKIP DP0 ;GET AC--SEE IF NEGATIVE ; 4729 =0*1*0 ; 4730 DDIV3A: Q_AC[1].AND.[MAG], ;POSITIVE (OR ZERO) U 0416, 0420,4552,0000,1275,5007,0701,0000,0000,1441 ; 4731 J/DDIV4 ;CONTINUE BELOW ; 4732 [T1]_[T1].XOR.#, ;NEGATIVE U 0417, 2726,6551,1717,4374,4007,0700,0010,0000,0007 ; 4733 #/7, CALL [QDNEG] ;UPDATE SAVED FLAGS ; 4734 =1*1*1 [AR]_[AR]*.5, ;SHIFT AR OVER U 0437, 0416,3447,0303,4174,4007,0700,0000,0000,0000 ; 4735 J/DDIV3A ;GO BACK AND LOAD Q ; 4736 = ; 4737 =0 ; 4738 DDIV4: [AR]_[AR]*.5 LONG, ;SHIFT AR OVER U 0420, 2710,3446,0303,4174,4007,0700,0010,0000,0000 ; 4739 CALL [DDIVS] ;SHIFT 1 MORE PLACE U 0421, 0422,2113,0305,4174,4007,0521,4000,0000,0000 ; 4740 [AR]-[BR], 3T, SKIP DP0 ;TEST MAGNITUDE ; 4741 =0 [AR]-[BR], 2T, U 0422, 0424,2113,0305,4174,4007,0620,4000,0000,0000 ; 4742 SKIP AD.EQ.0, J/DDIV5 U 0423, 2666,3221,0004,4174,4007,0700,0000,0000,0000 ; 4743 [ARX]_Q, J/DDIV5A ;ANSWER FITS ; 4744 ; 4745 =0 U 0424, 0533,3333,0017,4174,4003,5701,0000,0000,0000 ; 4746 DDIV5: READ [T1], 3T, DISP/DP, J/NODDIV U 0425, 0426,1003,0600,4174,4007,0521,4000,0000,0000 ; 4747 Q-[BRX], 3T, SKIP DP0 U 0426, 0533,3333,0017,4174,4003,5701,0000,0000,0000 ; 4748 =0 READ [T1], 3T, DISP/DP, J/NODDIV U 0427, 2666,3221,0004,4174,4007,0700,0000,0000,0000 ; 4749 [ARX]_Q ;COPY LOW WORD ; 4750 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 111 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ARITHMETIC -- DDIV ; 4751 ; 4752 ;HERE WITH EVERYTHING SETUP AND READY TO GO U 2666, 0345,4552,0000,1275,5007,0701,0000,0000,1442 ; 4753 DDIV5A: Q_AC[2].AND.[MAG] U 0345, 0460,3446,1200,4174,4007,0700,2010,0071,0042 ; 4754 =0* Q_Q*.5, SC_34., CALL [DBLDIV] U 0347, 2667,3224,0016,4174,4007,0700,0000,0000,0000 ; 4755 [T0]_Q*2 LONG U 2667, 2670,0002,1600,4174,4007,0700,0000,0000,0000 ; 4756 Q_Q+[T0] U 2670, 0430,4003,0000,1174,4007,0700,0400,0000,1440 ; 4757 AC[0]_Q.AND.[MAG] ;STORE ANSWER U 0430, 2710,3442,0400,4174,4007,0700,0010,0000,0000 ; 4758 =0 Q_[ARX], CALL [DDIVS] ;SHIFT OUT EXTRA ZERO BIT U 0431, 2671,3221,0004,4174,4007,0700,0000,0000,0000 ; 4759 [ARX]_Q ; .. U 2671, 0434,4552,0000,1275,5007,0701,0000,0000,1443 ; 4760 Q_AC[3].AND.[MAG] ; 4761 =0* [T0]_[AR]*.5 LONG, ;SHIFT Q, PUT AR ON DP ; 4762 SC_34., ;LOAD SHIFT COUNT ; 4763 SKIP DP0, ;LOOK AT AR SIGN U 0434, 0460,3446,0316,4174,4007,0520,2010,0071,0042 ; 4764 CALL [DBLDIV] ;GO DIVIDE U 0436, 2672,3224,0016,4174,4007,0700,0000,0000,0000 ; 4765 [T0]_Q*2 LONG U 2672, 0456,3333,0017,4174,4003,5701,0000,0000,0000 ; 4766 READ [T1], 3T, DISP/DP ;WHAT SIGN IS QUO ; 4767 =1110 [T0]_[T0]+Q, ;POSITIVE QUO U 0456, 2675,0001,1616,4174,4007,0700,0000,0000,0000 ; 4768 J/DDIV5B ;CONTINUE BELOW U 0457, 2673,2225,0016,4174,4007,0700,4000,0000,0000 ; 4769 [T0]_-Q*2 ;NEGATIVE QUO ; 4770 AD/-D-.25, DBUS/RAM, 3T, ; 4771 RAMADR/AC#, DEST/Q_AD, U 2673, 2674,1772,0000,0274,4007,0701,0040,0000,0000 ; 4772 MULTI PREC/1 U 2674, 0432,3223,0000,0174,4007,0621,0400,0000,0000 ; 4773 AC_Q, SKIP AD.EQ.0 U 0432, 2676,3440,1616,1174,4007,0700,0400,0000,1441 ; 4774 =0 AC[1]_[T0], J/DDIV5C U 0433, 2700,4223,0000,1174,4007,0700,0400,0000,1441 ; 4775 AC[1]_0, J/DDIV6 ; 4776 U 2675, 2700,4113,1600,1174,4007,0700,0400,0000,1441 ; 4777 DDIV5B: AC[1]_[T0].AND.[MAG], J/DDIV6 ;STORE LOW WORD IN + CASE ; 4778 U 2676, 2677,3551,1616,4374,0007,0700,0000,0040,0000 ; 4779 DDIV5C: [T0]_[T0].OR.#, #/400000, HOLD RIGHT U 2677, 2700,3440,1616,1174,4007,0700,0400,0000,1441 ; 4780 AC[1]_[T0] ; 4781 U 2700, 0440,3333,0003,4174,4007,0520,0000,0000,0000 ; 4782 DDIV6: READ [AR], SKIP DP0 ;LOOK AT AR SIGN ; 4783 =0 U 0440, 2704,3442,0400,4174,4007,0700,0000,0000,0000 ; 4784 DDIV7: Q_[ARX], J/DDIV8 U 0441, 2701,0112,0406,4174,4007,0700,0000,0000,0000 ; 4785 Q_[ARX]+[BRX] ; 4786 [AR]_[AR]+[BR], U 2701, 2702,0111,0503,4174,4007,0700,0040,0000,0000 ; 4787 MULTI PREC/1 U 2702, 2703,0002,0600,4174,4007,0700,0000,0000,0000 ; 4788 Q_Q+[BRX] ; 4789 [AR]_[AR]+[BR], U 2703, 2704,0111,0503,4174,4007,0700,0040,0000,0000 ; 4790 MULTI PREC/1 U 2704, 0475,3333,0017,4174,4003,5701,0000,0000,0000 ; 4791 DDIV8: READ [T1], 3T, DISP/DP ; 4792 =1101 ; 4793 DDIV8A: [AR]_[AR]*2 LONG, ASHC, ;POSITIVE REMAINDER U 0475, 2706,3444,0303,4174,4047,0700,0000,0000,0000 ; 4794 J/DDIV9 ;CONTINUE BELOW U 0477, 2705,2222,0000,4174,4007,0700,4000,0000,0000 ; 4795 Q_-Q ;NEGATE REMAINDER IN AR!Q ; 4796 [AR]_(-[AR]-.25)*2 LONG, U 2705, 2706,2444,0303,4174,4047,0700,0040,0000,0000 ; 4797 MULTI PREC/1, ASHC ; 4798 ; 4799 DDIV9: AC[2]_[AR]+[AR], 3T, U 2706, 0442,0113,0303,1174,4007,0521,0400,0000,1442 ; 4800 SKIP DP0 ; 4801 =0 AC[3]_Q.AND.[MAG], U 0442, 0060,4003,0000,1174,4156,4700,0400,0000,1443 ; 4802 NEXT INST U 0443, 2707,4002,0000,1174,4007,0700,0000,0000,1443 ; 4803 Q_Q.AND.[MAG], AC[3] ; 4804 AC[3]_[MAG].EQV.Q, U 2707, 0060,7003,0000,1174,4156,4700,0400,0000,1443 ; 4805 NEXT INST ; 4806 ; 4807 ; 4808 ;HERE IF WE WANT TO SET NO DIVIDE ; 4809 =11011 U 0533, 2726,4443,0000,4174,4007,0700,0010,0000,0000 ; 4810 NODDIV: CALL [QDNEG] ;FIXUP AC TO AC+3 U 0537, 0127,4443,0000,4174,4467,0700,0000,0051,1000 ; 4811 NO DIVIDE ;ABORT DIVIDE ; 4812 U 2710, 0001,3446,0303,4174,4044,1700,0000,0000,0000 ; 4813 DDIVS: [AR]_[AR]*.5 LONG, ASHC, RETURN [1] ; 4814 .IFNOT/FULL ; 4815 1627: ; 4816 DDIV: UUO ; 4817 .ENDIF/FULL ; 4818 ; 4819 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 112 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ARITHMETIC -- DIVIDE SUBROUTINE ; 4820 .TOC "ARITHMETIC -- DIVIDE SUBROUTINE" ; 4821 ; 4822 ;HERE IS THE SUBROUTINE TO DO DIVIDE ; 4823 ;ENTER WITH: ; 4824 ; AR!Q = D'END ; 4825 ; BR = D'SOR ; 4826 ;RETURN 2 WITH: ; 4827 ; AR = REMAINDER ; 4828 ; Q = QUOTIENT ; 4829 ;CALLER MUST CHECK FOR ZERO DIVIDE PRIOR TO CALL ; 4830 ; ; 4831 =1000 ; 4832 DIVSUB: Q_Q.AND.#, ;CLEAR SIGN BIT IN ; 4833 #/377777, ;MASK ; 4834 HOLD RIGHT, ;JUST CLEAR BIT 0 U 0510, 2711,4662,0000,4374,0007,0700,0010,0037,7777 ; 4835 CALL [DIVSGN] ;DO REAL DIVIDE U 0514, 0002,4443,0000,4174,4004,1700,0000,0000,0000 ; 4836 =1100 RETURN [2] ;ALL POSITIVE U 0515, 0002,2222,0000,4174,4004,1700,4000,0000,0000 ; 4837 =1101 Q_-Q, RETURN [2] ;-QUO +REM U 0516, 0517,2222,0000,4174,4007,0700,4000,0000,0000 ; 4838 =1110 Q_-Q ;ALL NEGATIVE U 0517, 0002,2441,0303,4174,4004,1700,4000,0000,0000 ; 4839 =1111 [AR]_-[AR], RETURN [2] ;NEGATIVE REMAINDER ; 4840 ; 4841 ;HERE IS THE INNER DIVIDE SUBROUTINE ; 4842 ;SAME SETUP AS DIVSUB ; 4843 ;RETURNS WITH AR AND Q POSITIVE AND ; 4844 ; 14 IF ALL POSITIVE ; 4845 ; 15 IF -QUO ; 4846 ; 16 IF ALL NEGATIVE ; 4847 ; 17 IF NEGATIVE REMAINDER ; 4848 ; 4849 BASIC DIV STEP "DEST/Q_Q*2, DIV, A/BR, B/AR, STEP SC" ; 4850 DIV STEP "BASIC DIV STEP, AD/A+B, DIVIDE/1" ; 4851 FIRST DIV STEP "BASIC DIV STEP, AD/B-A-.25, ADD .25" ; 4852 U 2711, 0444,3333,0003,4174,4007,0520,0000,0000,0000 ; 4853 DIVSGN: READ [AR], SKIP DP0 U 0444, 2713,4221,0004,4174,4007,0700,0000,0000,0000 ; 4854 =0 [ARX]_0, J/DVSUB2 ;REMAINDER IS POSITIVE U 0445, 0446,2222,0000,4174,4007,0621,4000,0000,0000 ; 4855 Q_-Q, SKIP AD.EQ.0 ;COMPLEMENT LOW WORD U 0446, 2712,7441,0303,4174,4007,0700,0000,0000,0000 ; 4856 =0 [AR]_.NOT.[AR], J/DVSUB1 ;COMPLEMENT HI WORD U 0447, 2712,2441,0303,4174,4007,0700,4000,0000,0000 ; 4857 [AR]_-[AR] ;TWO'S COMPLEMENT HI WORD SINCE ; 4858 ; LOW WORD WAS ZERO U 2712, 2713,3771,0004,4374,4007,0700,0000,0010,0000 ; 4859 DVSUB1: [ARX]_#, #/100000 ;REMAINDER IS NEGATIVE U 2713, 0450,3333,0005,4174,4007,0520,0000,0000,0000 ; 4860 DVSUB2: READ [BR], SKIP DP0 ;IS THE DIVISOR NEGATIVE ; 4861 =0 ; 4862 DVSUB3: [AR]_[AR]*.5 LONG, ;START TO PUT IN 9-CHIPS U 0450, 2715,3446,0303,4174,4007,0700,0000,0000,0000 ; 4863 J/DIVSET ;JOIN MAIN STREAM U 0451, 2714,2441,0505,4174,4007,0700,4000,0000,0000 ; 4864 [BR]_-[BR] ;COMPLEMENT DIVISOR ; 4865 [ARX]_[ARX].OR.#, ;ADJUST SIGN OF QUOTIENT U 2714, 0450,3551,0404,4374,4007,0700,0000,0004,0000 ; 4866 #/40000, J/DVSUB3 ;USE 9 CHIPS U 2715, 2716,3447,0303,4174,4007,0700,0000,0000,0000 ; 4867 DIVSET: [AR]_[AR]*.5 U 2716, 2717,3447,0505,4174,4007,0700,0000,0000,0000 ; 4868 [BR]_[BR]*.5 U 2717, 2720,3447,0505,4174,4007,0700,0000,0000,0000 ; 4869 [BR]_[BR]*.5 U 2720, 0452,1114,0503,4174,4067,0630,6000,0060,0000 ; 4870 FIRST DIV STEP ; 4871 ;HERE IS THE MAIN DIVIDE LOOP ; 4872 =0 U 0452, 0452,0114,0503,4174,4067,0630,2100,0060,0000 ; 4873 DIVIDE: DIV STEP, J/DIVIDE U 0453, 2721,3444,1717,4174,4067,0700,0100,0000,0000 ; 4874 [T1]_[T1]*2 LONG, DIVIDE/1, DIV U 2721, 0454,3447,0303,4174,4007,0520,0000,0000,0000 ; 4875 [AR]_[AR]*.5, SKIP DP0 ; 4876 =0 U 0454, 2722,3444,0303,4174,4007,0700,0000,0000,0000 ; 4877 FIX++: [AR]_[AR]*2 LONG, J/FIX1++ U 0455, 0454,0111,0503,4174,4007,0700,0000,0000,0000 ; 4878 [AR]_[AR]+[BR], J/FIX++ U 2722, 2723,3444,0303,4174,4007,0700,0000,0000,0000 ; 4879 FIX1++: [AR]_[AR]*2 LONG U 2723, 2724,4002,1200,4174,4007,0700,0000,0000,0000 ; 4880 Q_[MASK].AND.Q ; 4881 READ [ARX], 3T, ;RETURN TO 1 OF 4 PLACES ; 4882 DISP/1, ;BASED ON SIGN OF RESULT U 2724, 0014,3333,0004,4174,4000,1701,0000,0000,0000 ; 4883 J/14 ;RETURN ; 4884 ; 4885 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 113 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ARITHMETIC -- DOUBLE DIVIDE SUBROUTINE ; 4886 .TOC "ARITHMETIC -- DOUBLE DIVIDE SUBROUTINE" ; 4887 .IF/FULL ; 4888 ;CALL WITH: ; 4889 ; AR!ARX!Q = 3 WORD DV'END ; 4890 ; BR!BRX = 2 WORD DV'SOR ; 4891 ;RETURN 2 WITH: ; 4892 ; AR!ARX = 2 WORD REMAINDER ; 4893 ; CORRECT IF POSITIVE (Q IS ODD) ; 4894 ; WRONG (BY BR!BRX) IF NEGATIVE (Q IS EVEN) ; 4895 ; Q = 1 WORD QUOTIENT ; 4896 ;CALLER MUST CHECK FOR ZERO DIVIDE PRIOR TO CALL ; 4897 ; ; 4898 ;NOTE: THIS SUBROUTINE ONLY WORKS FOR POSITIVE NUMBERS ; 4899 ; ; 4900 =0 ; 4901 ;HERE FOR NORMAL STARTUP ; 4902 DBLDIV: [ARX]_([ARX]-[BRX])*2 LONG, ;SUBTRACT LOW WORD U 0460, 2725,1114,0604,4174,4057,0700,4000,0000,0000 ; 4903 LSHC, J/DIVHI ;GO ENTER LOOP ; 4904 ;SKIP ENTRY POINT IF FINAL STEP IN PREVIOUS ENTRY WAS IN ERROR ; 4905 [ARX]_([ARX]+[BRX])*2 LONG, ;CORRECTION STEP U 0461, 2725,0114,0604,4174,4057,0700,0000,0000,0000 ; 4906 LSHC, J/DIVHI ;GO ENTER LOOP ; 4907 ; 4908 ;HERE IS DOUBLE DIVIDE LOOP ; 4909 DIVHI: AD/A+B, ;ADD (HARDWARE MAY OVERRIDE) ; 4910 A/BR, B/AR, ;OPERANDS ARE AR AND BR ; 4911 DEST/AD*2, ;SHIFT LEFT ; 4912 SHSTYLE/NORM, ;SET SHIFT PATHS (SEE DPE1) ; 4913 MULTI PREC/1, ;INJECT SAVED BITS U 2725, 0462,0115,0503,4174,4007,0630,2040,0060,0000 ; 4914 STEP SC ;COUNT DOWN LOOP ; 4915 =0 AD/A+B, ;ADD (HARDWARE MAY OVERRIDE) ; 4916 A/BRX, B/ARX, ;LOW WORDS ; 4917 DEST/Q_Q*2, ;SHIFT WHOLE MESS LEFT ; 4918 SHSTYLE/DIV, ;SET SHIFT PATHS (SEE DPE1) ; 4919 DIVIDE/1, ;SAVE BITS U 0462, 2725,0114,0604,4174,4067,0700,0100,0000,0000 ; 4920 J/DIVHI ;KEEP LOOPING ; 4921 ;HERE WHEN ALL DONE ; 4922 DEST/Q_Q*2, DIV, ;SHIFT IN LAST Q BIT ; 4923 DIVIDE/1, ;GENERATE BIT U 0463, 0002,4444,0002,4174,4064,1700,0100,0000,0000 ; 4924 B/HR, RETURN [2] ;ZERO HR AND RETURN ; 4925 ; 4926 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 114 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ARITHMETIC -- SUBROUTINES FOR ARITHMETIC ; 4927 .TOC "ARITHMETIC -- SUBROUTINES FOR ARITHMETIC" ; 4928 ; 4929 ;QUAD WORD NEGATE ; 4930 ;ARGUMENT IN AC!AC1!AC2!AC3 ; 4931 ;LEAVES COPY OF AC!AC1 IN AR!Q ; 4932 ;RETURNS TO CALL!24 U 2726, 2727,1772,0000,1274,4007,0701,4000,0000,1443 ; 4933 QDNEG: Q_-AC[3] ; 4934 AC[3]_Q.AND.[MAG], ;PUT BACK LOW WORD U 2727, 0464,4003,0000,1174,4007,0621,0400,0000,1443 ; 4935 SKIP AD.EQ.0 ;SEE IF ANY CARRY ; 4936 =0 U 0464, 2732,7772,0000,1274,4007,0701,0000,0000,1442 ; 4937 COM2A: Q_.NOT.AC[2], J/COM2 ;CARRY--DO 1'S COMPLEMENT U 0465, 2730,1772,0000,1274,4007,0701,4000,0000,1442 ; 4938 Q_-AC[2] ;NEXT WORD ; 4939 AC[2]_Q.AND.[MAG], ;PUT BACK WORD U 2730, 0466,4003,0000,1174,4007,0621,0400,0000,1442 ; 4940 SKIP AD.EQ.0 ; 4941 =0 U 0466, 2733,7772,0000,1274,4007,0701,0000,0000,1441 ; 4942 COM1A: Q_.NOT.AC[1], J/COM1 U 0467, 2731,1772,0000,1274,4007,0701,4000,0000,1441 ; 4943 Q_-AC[1] ; 4944 AC[1]_Q.AND.[MAG], U 2731, 0470,4003,0000,1174,4007,0621,0400,0000,1441 ; 4945 SKIP AD.EQ.0 ; 4946 =0 U 0470, 2734,7771,0003,0274,4007,0700,0000,0000,0000 ; 4947 COM0A: [AR]_.NOT.AC, J/COM0 U 0471, 2734,1771,0003,0274,4007,0701,4000,0000,0000 ; 4948 [AR]_-AC, 3T, J/COM0 ; 4949 U 2732, 0466,4003,0000,1174,4007,0700,0400,0000,1442 ; 4950 COM2: AC[2]_Q.AND.[MAG], J/COM1A U 2733, 0470,4003,0000,1174,4007,0700,0400,0000,1441 ; 4951 COM1: AC[1]_Q.AND.[MAG], J/COM0A U 2734, 0024,3440,0303,0174,4004,1700,0400,0000,0000 ; 4952 COM0: AC_[AR], RETURN [24] ; 4953 .ENDIF/FULL ; 4954 ; 4955 ;DOUBLE WORD NEGATE ; 4956 ;ARGUMENT IN AR AND ARX ; 4957 ;RETURNS TO CALL!2 ; 4958 U 2735, 2736,4551,0404,4374,0007,0700,0000,0037,7777 ; 4959 DBLNEG: CLEAR ARX0 ;FLUSH DUPLICATE SIGN ; 4960 DBLNGA: [ARX]_-[ARX], ;FLIP LOW WORD U 2736, 0472,2441,0404,4174,4007,0621,4000,0000,0000 ; 4961 SKIP AD.EQ.0 ;SEE IF CARRY ; 4962 =0 [AR]_.NOT.[AR], ;NO CARRY-- 1 COMP U 0472, 1572,7441,0303,4174,4467,0700,0000,0001,0001 ; 4963 AD FLAGS, J/CLARX0 ;CLEAR LOW SIGN ; 4964 [AR]_-[AR], ;CARRY U 0473, 1572,2441,0303,4174,4467,0701,4000,0001,0001 ; 4965 AD FLAGS, 3T, J/CLARX0 ; 4966 ; 4967 ;SAME THING BUT DOES NOT SET PC FLAGS U 2737, 0500,2441,0404,4174,4007,0621,4000,0000,0000 ; 4968 DBLNG1: [ARX]_-[ARX], SKIP AD.EQ.0 U 0500, 1572,7441,0303,4174,4007,0700,0000,0000,0000 ; 4969 =0 [AR]_.NOT.[AR], J/CLARX0 U 0501, 1572,2441,0303,4174,4007,0700,4000,0000,0000 ; 4970 [AR]_-[AR], J/CLARX0 ; 4971 ; 4972 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 115 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 ARITHMETIC -- SUBROUTINES FOR ARITHMETIC ; 4973 .NOBIN ; 4974 .TOC "BYTE GROUP -- IBP, ILDB, LDB, IDPB, DPB" ; 4975 ; 4976 ; 4977 ;ALL FIVE INSTRUCTIONS OF THIS GROUP ARE CALLED WITH THE BYTE POINTER ; 4978 ;IN THE AR. ALL INSTRUCTIONS SHARE COMMON SUBROUTINES. ; 4979 ; 4980 ;IBP OR ADJBP ; 4981 ;IBP IF AC#0, ADJBP OTHERWISE ; 4982 ; HERE WITH THE BASE POINTER IN AR ; 4983 ; 4984 ;HERE IS A MACRO TO DO IBP. WHAT HAPPENS IS: ; 4985 ; THE AR IS PUT ON THE DP. ; 4986 ; THE BR IS LOADED FROM THE DP WITH BITS 0-5 FROM SCAD ; 4987 ; THE SCAD COMPUTES P-S ; 4988 ; IBPS IS CALLED WITH A 4-WAY DISPATCH ON SCAD0 AND FIRST-PART-DONE ; 4989 ;THE MACRO IS WRITTEN WITH SEVERAL SUB-MACROS BECAUSE OF RESTRICTIONS ; 4990 ; IN THE MICRO ASSEMBLER ; 4991 ; 4992 IBP DP "AD/D, DEST/A, A/AR, B/BR, DBUS/DBM, DBM/DP, BYTE/BYTE1" ; 4993 IBP SCAD "SCAD/A-B, SCADA/BYTE1, SCADB/SIZE" ; 4994 IBP SPEC "SCAD DISP, SKIP FPD" ; 4995 CALL IBP "IBP DP, IBP SCAD, IBP SPEC, CALL [IBPS], DT/3T" ; 4996 ; 4997 SET P TO 36-S "AD/D,DEST/A,A/BR,B/AR,DBUS/DBM,DBM/DP,SCAD/A-B,SCADB/SIZE,BYTE/BYTE1,SCADA/PTR44" ; 4998 ; 4999 ;THE FOLLOWING MACRO IS USED FOR COUNTING SHIFTS IN THE BYTE ROUTINES. IT ; 5000 ; USES THE FE AND COUNTS BY 8. NOTE: BYTE STEP IS A 2S WEIGHT SKIP NOT 1S. ; 5001 BYTE STEP "SCAD/A+B,SCADA/S#,S#/1770,SCADB/FE,LOAD FE, 3T,SCAD DISP" ; 5002 ; 5003 .BIN ; 5004 ; 5005 .DCODE D 0133, 0015,1610,1100 ; 5006 133: R, AC, J/IBP ;OR ADJBP D 0134, 0000,1620,1500 ; 5007 134: R,W TEST, J/ILDB ;CAN'T USE RPW BECAUSE OF FPD D 0135, 0000,1624,1100 ; 5008 R, J/LDB D 0136, 0000,1630,1500 ; 5009 R,W TEST, J/IDPB D 0137, 0000,1634,1100 ; 5010 R, J/DPB ; 5011 .UCODE ; 5012 1610: U 1610, 0520,4443,0000,4174,4007,0360,0000,0000,0000 ; 5013 IBP: SKIP IF AC0 ;SEE IF ADJBP ; 5014 =000 WORK[ADJPTR]_[AR], ;SAVE POINTER U 0520, 2775,3333,0003,7174,4007,0700,0400,0000,0223 ; 5015 J/ADJBP ;GO ADJUST BYTE POINTER U 0521, 0540,3770,0305,4334,4016,7351,0010,0033,6000 ; 5016 =001 CALL IBP ;BUMP BYTE POINTER U 0525, 0070,3443,0100,4174,4156,4700,0200,0014,0012 ; 5017 =101 DONE ;POINTER STORED ; 5018 = ; 5019 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 116 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 BYTE GROUP -- IBP, ILDB, LDB, IDPB, DPB ; 5020 ; 5021 1620: U 1620, 0540,3770,0305,4334,4016,7351,0010,0033,6000 ; 5022 ILDB: CALL IBP ;BUMP BYTE POINTER ; 5023 1624: ; 5024 LDB: READ [AR], ;LOOK AT POINTER ; 5025 LOAD BYTE EA, FE_P, 3T, ;GET STUFF OUT OF POINTER U 1624, 2745,3333,0003,4174,4217,0701,1010,0073,0500 ; 5026 CALL [BYTEA] ;COMPUTE EFFECTIVE ADDRESS U 1625, 0474,3443,0100,4174,4007,0700,0200,0014,0012 ; 5027 1625: VMA_[PC], FETCH ;START FETCH OF NEXT INST ; 5028 =0* READ [AR], ;LOOK AT POINTER ; 5029 FE_FE.AND.S#, S#/0770, ;MASK OUT JUNK IN FE ; 5030 BYTE DISP, ;DISPATCH ON BYTE SIZE U 0474, 0550,3333,0003,4174,4006,5701,1010,0051,0770 ; 5031 CALL [LDB1] ;GET BYTE ; 5032 AC_[AR], CLR FPD, ;STORE AC U 0476, 0127,3440,0303,0174,4467,0700,0400,0005,0000 ; 5033 J/NIDISP ;GO DO NEXT INST ; 5034 ; 5035 1630: U 1630, 0540,3770,0305,4334,4016,7351,0010,0033,6000 ; 5036 IDPB: CALL IBP ;BUMP BYTE POINTER ; 5037 1634: U 1634, 2740,3775,0004,0274,4007,0701,0000,0000,0000 ; 5038 DPB: [ARX]_AC*2 ;PUT 7 BIT BYTE IN 28-34 ; 5039 AD/A, A/ARX, SCAD/A, ;PUT THE BYTE INTO ; 5040 SCADA/BYTE5, 3T, ; INTO THE FE REGISTER U 2740, 2741,3443,0400,4174,4007,0701,1000,0077,0000 ; 5041 LOAD FE ; FE REGISTER U 2741, 0504,3771,0004,0276,6007,0700,0000,0000,0000 ; 5042 [ARX]_AC ;PUT BYTE IN ARX ; 5043 =100 READ [AR], ;LOOK AT BYTE POINTER ; 5044 LOAD BYTE EA, ;LOAD UP EFFECTIVE ADDRESS U 0504, 2745,3333,0003,4174,4217,0700,0010,0000,0500 ; 5045 CALL [BYTEA] ;COMPUTE EFFECTIVE ADDRESS ; 5046 READ [AR], ;LOOK AT POINTER AGAIN ; 5047 BYTE DISP, ;DISPATCH ON SIZE U 0505, 0560,3333,0003,4174,4006,5701,0010,0000,0000 ; 5048 CALL [DPB1] ;GO STORE BYTE U 0507, 1400,4443,0000,4174,4467,0700,0000,0005,0000 ; 5049 =111 CLR FPD, J/DONE ;ALL DONE ; 5050 = ; 5051 ; 5052 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 117 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 BYTE GROUP -- INCREMENT BYTE POINTER SUBROUTINE ; 5053 .TOC "BYTE GROUP -- INCREMENT BYTE POINTER SUBROUTINE" ; 5054 ; 5055 =00 U 0540, 2743,3441,0503,4174,4007,0700,0200,0003,0002 ; 5056 IBPS: [AR]_[BR], START WRITE, J/IBPX ;NO OVERFLOW, BR HAS ANSWER U 0541, 0004,4443,0000,4174,4004,1700,0000,0000,0000 ; 5057 RETURN [4] ;FIRST PART DONE SET U 0542, 2742,3770,0503,4334,4017,0700,0000,0032,6000 ; 5058 SET P TO 36-S, J/NXTWRD ;WORD OVERFLOW U 0543, 0004,4443,0000,4174,4004,1700,0000,0000,0000 ; 5059 RETURN [4] ;FPD WAS SET IGNORE OVERFLOW ; 5060 ; AND RETURN ; 5061 U 2742, 2743,0111,0703,4170,4007,0700,0200,0003,0002 ; 5062 NXTWRD: [AR]_[AR]+1, HOLD LEFT, START WRITE ;BUMP Y AND RETURN U 2743, 0004,3333,0003,4175,5004,1701,0200,0000,0002 ; 5063 IBPX: MEM WRITE, MEM_[AR], RETURN [4] ; 5064 ; 5065 ; 5066 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 118 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 BYTE GROUP -- BYTE EFFECTIVE ADDRESS EVALUATOR ; 5067 .TOC "BYTE GROUP -- BYTE EFFECTIVE ADDRESS EVALUATOR" ; 5068 ; 5069 ;ENTER WITH POINTER IN AR ; 5070 ;RETURN1 WITH (EA) IN VMA AND WORD IN BR ; 5071 BYTEAS: EA MODE DISP, ;HERE TO AVOID FPD U 2744, 0530,4443,0000,2174,4006,6700,0000,0000,0000 ; 5072 J/BYTEA0 ;GO COMPUTE EA ; 5073 BYTEA: SET FPD, ;SET FIRST-PART-DONE U 2745, 0530,4443,0000,2174,4466,6700,0000,0003,0000 ; 5074 EA MODE DISP ;DISPATCH ; 5075 =100* ; 5076 BYTEA0: VMA_[AR]+XR, ;INDEXING ; 5077 START READ, ;FETCH DATA WORD ; 5078 PXCT BYTE DATA, ;FOR PXCT U 0530, 2747,0553,0300,2274,4007,0700,0200,0004,0712 ; 5079 J/BYTFET ;GO WAIT ; 5080 VMA_[AR], ;PLAIN ; 5081 START READ, ;START CYCLE ; 5082 PXCT BYTE DATA, ;FOR PXCT U 0532, 2747,3443,0300,4174,4007,0700,0200,0004,0712 ; 5083 J/BYTFET ;GO WAIT ; 5084 VMA_[AR]+XR, ;BOTH ; 5085 START READ, ;START CYCLE ; 5086 PXCT BYTE PTR EA, ;FOR PXCT U 0534, 2746,0553,0300,2274,4007,0700,0200,0004,0512 ; 5087 J/BYTIND ;GO DO INDIRECT ; 5088 VMA_[AR], ;JUST @ ; 5089 START READ, ;START READ U 0536, 2746,3443,0300,4174,4007,0700,0200,0004,0512 ; 5090 PXCT BYTE PTR EA ;FOR PXCT ; 5091 BYTIND: MEM READ, ;WAIT FOR @ WORD ; 5092 [AR]_MEM, ;PUT IN AR ; 5093 HOLD LEFT, ;JUST IN RH (SAVE P & S) ; 5094 LOAD BYTE EA, ;LOOP BACK U 2746, 2744,3771,0003,4361,5217,0700,0200,0000,0502 ; 5095 J/BYTEAS ; .. ; 5096 ; 5097 BYTFET: MEM READ, ;WAIT FOR BYTE DATA ; 5098 [BR]_MEM.AND.MASK, ; WORD. UNSIGNED U 2747, 0001,4551,1205,4365,5004,1700,0200,0000,0002 ; 5099 RETURN [1] ;RETURN TO CALLER ; 5100 ; 5101 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 119 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 BYTE GROUP -- LOAD BYTE SUBROUTINE ; 5102 .TOC "BYTE GROUP -- LOAD BYTE SUBROUTINE" ; 5103 ; 5104 ;CALL WITH: ; 5105 ; WORD IN BR ; 5106 ; POINTER IN AR ; 5107 ; P IN FE ; 5108 ; BYTE DISPATCH ; 5109 ;RETURN2 WITH BYTE IN AR ; 5110 LDB SCAD "SCAD/A,BYTE/BYTE5" ; 5111 7-BIT LDB "AD/D,DBUS/DBM,DBM/DP,DEST/A,A/BR,B/BR, LDB SCAD" ; 5112 ; 5113 =000 ; 5114 LDB1: GEN 17-FE, 3T, ;GO SEE IF ALL THE BITS ; 5115 SCAD DISP, ; ARE IN THE LEFT HALF U 0550, 0544,4443,0000,4174,4006,7701,0000,0031,0210 ; 5116 J/LDBSWP ;GO TO LDBSWP & SKIP IF LH ; 5117 ; 5118 ;HERE ARE THE 7-BIT BYTES U 0551, 2750,3770,0505,4334,4057,0700,0000,0073,0000 ; 5119 =001 7-BIT LDB, SCADA/BYTE1, J/LDB7 U 0552, 2750,3770,0505,4334,4057,0700,0000,0074,0000 ; 5120 =010 7-BIT LDB, SCADA/BYTE2, J/LDB7 U 0554, 2750,3770,0505,4334,4057,0700,0000,0075,0000 ; 5121 =100 7-BIT LDB, SCADA/BYTE3, J/LDB7 U 0555, 2750,3770,0505,4334,4057,0700,0000,0076,0000 ; 5122 =101 7-BIT LDB, SCADA/BYTE4, J/LDB7 U 0557, 2750,3770,0505,4334,4057,0700,0000,0077,0000 ; 5123 =111 7-BIT LDB, SCADA/BYTE5, J/LDB7 ; 5124 = ; 5125 ; 5126 ;FOR 7-BIT BYTES WE HAVE BYTE IN BR 28-35 AND JUNK IN REST OF BR. ; 5127 ; WE JUST MASK THE SELECTED BYTE AND SHIFT ONE PLACE RIGHT. ; 5128 LDB7: AD/ZERO,RSRC/DA, ;LH_ZERO, RH_D.AND.A ; 5129 DBUS/DBM,DBM/#,#/376, ;D INPUT IS 376 ; 5130 A/BR, ;A IS BR ; 5131 B/AR, ;PUT RESULT IN AR ; 5132 DEST/AD*.5, 3T, ;SHIFT RESULT 1 PLACE U 2750, 0002,4257,0503,4374,4004,1701,0000,0000,0376 ; 5133 RETURN [2] ;RETURN TO CALLER ; 5134 ; 5135 ;HERE FOR NORMAL BYTES ; 5136 =00 ; 5137 LDBSWP: FE_-FE, ;MAKE P NEGATIVE U 0544, 2752,4443,0000,4174,4007,0700,1000,0031,0000 ; 5138 J/LDBSH ;JOIN MAIN LDB LOOP U 0546, 2751,3770,0505,4344,4007,0700,0000,0000,0000 ; 5139 =10 [BR]_[BR] SWAP ;SHIFT 18 STEPS ; 5140 = ; 5141 [BR]_0, HOLD RIGHT, ;PUT ZERO IN LH U 2751, 2752,4221,0005,4174,0007,0700,1000,0031,0220 ; 5142 FE_-FE+S#, S#/220 ;UPDATE FE ; 5143 LDBSH: [BR]_[BR]*.5, ;SHIFT RIGHT ; 5144 FE_FE+10, ;UPDATE THE FE U 2752, 2753,3447,0505,4174,4007,0700,1020,0041,0010 ; 5145 MULTI SHIFT/1 ;FAST SHIFT U 2753, 2754,3333,0003,4174,4007,0700,1000,0031,7770 ; 5146 READ [AR], FE_-S-10 ;GET SIZE U 2754, 2755,4222,0000,4174,4007,0700,0000,0000,0000 ; 5147 Q_0 ;CLEAR Q ; 5148 GEN MSK [AR], ;PUT MASK IN Q (WIPEOUT AR) ; 5149 FE_FE+10, ;COUNT UP ALL STEPS U 2755, 2756,4224,0003,4174,4027,0700,1020,0041,0010 ; 5150 MULTI SHIFT/1 ;FAST SHIFT U 2756, 2757,4224,0003,4174,4027,0700,0000,0000,0000 ; 5151 GEN MSK [AR] ;ONE MORE BIT U 2757, 0002,4001,0503,4174,4004,1700,0000,0000,0000 ; 5152 [AR]_[BR].AND.Q, RETURN [2] ; 5153 ; 5154 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 120 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 BYTE GROUP -- LOAD BYTE SUBROUTINE ; 5155 .NOBIN ; 5156 .TOC "BYTE GROUP -- DEPOSIT BYTE IN MEMORY" ; 5157 ; 5158 ;FLOW FOR DPB (NOT 7-BIT BYTE) ; 5159 ; ; 5160 ;FIRST SET ARX TO -1 AND Q TO ZERO AND ROTATE LEFT ; 5161 ; S PLACES GIVING: ; 5162 ; 5163 ; ARX Q ; 5164 ; +------------------!------------------+ ; 5165 ; !111111111111000000!000000000000111111! ; 5166 ; +------------------!------------------+ ; 5167 ; !<--->! ; 5168 ; S BITS ; 5169 ; ; 5170 ; 5171 ;NOW THE AC IS LOAD INTO THE ARX AND BOTH THE ARX AND Q ; 5172 ; ARE SHIFTED LEFT P BITS GIVING: ; 5173 ; 5174 ; +------------------!------------------+ ; 5175 ; !??????BBBBBB000000!000000111111000000! ; 5176 ; +------------------!------------------+ ; 5177 ; <----><----> <----><----> ; 5178 ; JUNK BYTE MASK P BITS ; 5179 ; ; 5180 ; 5181 ;AT THIS POINT WE ARE ALMOST DONE. WE NEED TO AND ; 5182 ; THE BR WITH .NOT. Q TO ZERO THE BITS FOR THE BYTE ; 5183 ; AND AND ARX WITH Q TO MASK OUT THE JUNK THIS GIVES: ; 5184 ; ; 5185 ; ARX ; 5186 ; +------------------+ ; 5187 ; !000000BBBBBB000000! ; 5188 ; +------------------! ; 5189 ; ; 5190 ; AR ; 5191 ; +------------------+ ; 5192 ; !DDDDDD000000DDDDDD! ; 5193 ; +------------------+ ; 5194 ; ; 5195 ;WE NOW OR THE AR WITH ARX TO GENERATE THE ANSWER. ; 5196 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 121 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 BYTE GROUP -- DEPOSIT BYTE IN MEMORY ; 5197 ; 5198 .BIN ; 5199 ; 5200 ;DEPOSIT BYTE SUBROUTINE ; 5201 ;CALL WITH: ; 5202 ; BYTE POINTER IN AR ; 5203 ; BYTE TO STORE IN ARX ; 5204 ; WORD TO MERGE WITH IN BR ; 5205 ; (E) OF BYTE POINTER IN VMA ; 5206 ; 7-BIT BYTE IN FE ; 5207 ; BYTE DISPATCH ; 5208 ;RETURN2 WITH BYTE IN MEMORY ; 5209 ; ; 5210 DPB SCAD "SCAD/A+B,SCADA/S#,SCADB/FE,S#/0" ; 5211 7-BIT DPB "AD/D,DEST/A,A/BR,DBUS/DBM,DBM/DP,B/AR, DPB SCAD" ; 5212 ; 5213 =000 U 0560, 2762,3333,0003,4174,4007,0700,1000,0031,7770 ; 5214 DPB1: READ [AR], FE_-S-10, J/DPBSLO ;NOT SPECIAL U 0561, 2760,3770,0503,4334,4017,0700,0000,0041,0000 ; 5215 =001 7-BIT DPB, BYTE/BYTE1, J/DPB7 U 0562, 2760,3770,0503,4334,4027,0700,0000,0041,0000 ; 5216 =010 7-BIT DPB, BYTE/BYTE2, J/DPB7 U 0564, 2760,3770,0503,4334,4037,0700,0000,0041,0000 ; 5217 =100 7-BIT DPB, BYTE/BYTE3, J/DPB7 U 0565, 2760,3770,0503,4334,4047,0700,0000,0041,0000 ; 5218 =101 7-BIT DPB, BYTE/BYTE4, J/DPB7 U 0567, 2760,3770,0503,4334,4057,0700,0000,0041,0000 ; 5219 =111 7-BIT DPB, BYTE/BYTE5, J/DPB7 ; 5220 = U 2760, 2761,3447,1200,4174,4007,0700,0200,0003,0002 ; 5221 DPB7: [MAG]_[MASK]*.5, START WRITE U 2761, 0002,3333,0003,4175,5004,1701,0200,0000,0002 ; 5222 MEM WRITE, MEM_[AR], RETURN [2] ; 5223 ; 5224 U 2762, 2763,4222,0000,4174,4007,0700,0000,0000,0000 ; 5225 DPBSLO: Q_0 ;CLEAR Q ; 5226 GEN MSK [MAG], ;GENERATE MASK IN Q (ZAP MAG) ; 5227 FE_FE+10, ;COUNT STEPS U 2763, 2764,4224,0000,4174,4027,0700,1020,0041,0010 ; 5228 MULTI SHIFT/1 ;FAST SHIFT U 2764, 2765,4224,0000,4174,4027,0700,0000,0000,0000 ; 5229 GEN MSK [MAG] ;ONE MORE BITS U 2765, 2766,3333,0003,4174,4007,0701,1000,0073,0000 ; 5230 READ [AR], 3T, FE_P ;AMOUNT TO SHIFT U 2766, 2767,4443,0000,4174,4007,0700,1000,0051,0770 ; 5231 FE_FE.AND.S#, S#/0770 ;MASK OUT JUNK ; 5232 Q_Q.AND.[MASK], ;CLEAR BITS 36 AND 37 U 2767, 2770,4002,1200,4174,4007,0700,1000,0031,0000 ; 5233 FE_-FE ;MINUS NUMBER OF STEPS ; 5234 [ARX]_[ARX]*2 LONG, ;SHIFT BYTE AND MASK ; 5235 FE_FE+10, ;COUNT OUT STEPS U 2770, 2771,3444,0404,4174,4007,0700,1020,0041,0010 ; 5236 MULTI SHIFT/1 ;FAST SHIFT ; 5237 ;AT THIS POINT WE HAVE DONE ALL THE SHIFTING WE NEED. THE BYTE IS ; 5238 ; IN ARX AND THE MASK IS IN Q. U 2771, 2772,7221,0003,4174,4007,0700,0000,0000,0000 ; 5239 [AR]_.NOT.Q U 2772, 2773,4111,0503,4174,4007,0700,0000,0000,0000 ; 5240 [AR]_[AR].AND.[BR] U 2773, 2774,4001,0404,4174,4007,0700,0000,0000,0000 ; 5241 [ARX]_[ARX].AND.Q ; 5242 [AR]_[AR].OR.[ARX], U 2774, 2760,3111,0403,4174,4007,0700,0000,0000,0000 ; 5243 J/DPB7 ; 5244 ; 5245 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 122 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 BYTE GROUP -- ADJUST BYTE POINTER ; 5246 .TOC "BYTE GROUP -- ADJUST BYTE POINTER" ; 5247 .IF/FULL ; 5248 ;FIRST THE NUMBER OF BYTES PER WORD IS COMPUTED FROM THE ; 5249 ; FOLLOWING FORMULA: ; 5250 ; ; 5251 ; ( P ) ( 36-P ) ; 5252 ; BYTES PER WORD = INT( --- ) + INT( ---- ) ; 5253 ; ( S ) ( S ) ; 5254 ; ; 5255 ;THIS GIVES 2 BYTES PER WORD FOR THE FOLLOWING 12 BIT BYTE: ; 5256 ; !=====================================! ; 5257 ; ! 6 !////////////! 12 ! 6 ! ; 5258 ; !=====================================! ; 5259 ; P=18 AND S=12 ; 5260 ; ; 5261 ;WE GET 3 BYTES/WORD IF THE BYTES FALL IN THE NATURAL PLACE: ; 5262 ; !=====================================! ; 5263 ; ! 12 !\\\\\\\\\\\\! 12 ! ; 5264 ; !=====================================! ; 5265 ; P=12 AND S=12 ; 5266 ; 5267 ;WE COME HERE WITH THE BYTE POINTER IN AR, AND ADJPTR ; 5268 ADJBP: [ARX]_[AR] SWAP, ;MOVE SIZE OVER U 2775, 0502,3770,0304,4344,4007,0700,2000,0071,0011 ; 5269 SC_9. ;READY TO SHIFT ; 5270 =0 ; 5271 ADJBP0: [ARX]_[ARX]*.5, ;SHIFT P OVER ; 5272 STEP SC, ; .. U 0502, 0502,3447,0404,4174,4007,0630,2000,0060,0000 ; 5273 J/ADJBP0 ; .. ; 5274 [ARX]_([ARX].AND.#)*.5, ;SHIFT AND MASK ; 5275 3T, ;WAIT U 0503, 2776,4557,0404,4374,4007,0701,0000,0000,0176 ; 5276 #/176 ;6 BIT MASK ; 5277 [ARX]_#, ;CLEAR LH ; 5278 #/0, ; .. U 2776, 2777,3771,0004,4374,0007,0700,0000,0000,0000 ; 5279 HOLD RIGHT ; .. U 2777, 3000,3333,0004,7174,4007,0700,0400,0000,0221 ; 5280 WORK[ADJP]_[ARX] ;SAVE P ; 5281 [BR]_([AR].AND.#)*.5, ;START ON S ; 5282 3T, ;EXTRACT S U 3000, 3001,4557,0305,4374,4007,0701,0000,0000,7700 ; 5283 #/007700 ; .. ; 5284 [BR]_[BR] SWAP, ;SHIFT 18 PLACES U 3001, 3002,3770,0505,4344,4007,0700,2000,0071,0003 ; 5285 SC_3 ; .. ; 5286 [BR]_0, ;CLEAR LH U 3002, 0512,4221,0005,4174,0007,0700,0000,0000,0000 ; 5287 HOLD RIGHT ; .. ; 5288 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 123 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 BYTE GROUP -- ADJUST BYTE POINTER ; 5289 ; 5290 =0 ; 5291 ADJBP1: [BR]_[BR]*.5, ;SHIFT S OVER ; 5292 STEP SC, ; .. U 0512, 0512,3447,0505,4174,4007,0630,2000,0060,0000 ; 5293 J/ADJBP1 ; .. ; 5294 WORK[ADJS]_[BR], ;SALT S AWAY U 0513, 0522,3333,0005,7174,4007,0621,0400,0000,0222 ; 5295 SKIP AD.EQ.0 ;SEE IF ZERO ; 5296 =0 Q_[ARX], ;DIVIDE P BY S ; 5297 SC_34., ;STEP COUNT U 0522, 0524,3442,0400,4174,4007,0700,2000,0071,0042 ; 5298 J/ADJBP2 ;SKIP NEXT WORD U 0523, 1404,3771,0003,7274,4007,0701,0000,0000,0223 ; 5299 [AR]_WORK[ADJPTR], J/MOVE ;S=0 -- SAME AS MOVE ; 5300 =0* ; 5301 ADJBP2: [AR]_#, ;FILL AR WITH SIGN BITS ; 5302 #/0, ;POSITIVE U 0524, 0510,3771,0003,4374,4007,0700,0010,0000,0000 ; 5303 CALL [DIVSUB] ;GO DIVIDE U 0526, 3003,3223,0000,7174,4007,0700,0400,0000,0224 ; 5304 WORK[ADJQ1]_Q ;SAVE QUOTIENT ; 5305 Q_#, ;COMPUTE (36-P)/S ; 5306 #/36., ; .. U 3003, 3004,3772,0000,4370,4007,0700,0000,0000,0044 ; 5307 HOLD LEFT ;SMALL ANSWER U 3004, 3005,1662,0000,7274,4007,0701,4000,0000,0221 ; 5308 Q_Q-WORK[ADJP] ;SUBTRACT P U 3005, 3006,3771,0005,7274,4007,0701,0000,0000,0222 ; 5309 [BR]_WORK[ADJS] ;DIVIDE BY S U 3006, 0545,4443,0000,4174,4007,0700,2000,0071,0042 ; 5310 SC_34. ;STEP COUNT ; 5311 =0* [AR]_#, ;MORE SIGN BITS ; 5312 #/0, ; .. U 0545, 0510,3771,0003,4374,4007,0700,0010,0000,0000 ; 5313 CALL [DIVSUB] ;GO DIVIDE U 0547, 3007,3333,0003,7174,4007,0700,0400,0000,0225 ; 5314 WORK[ADJR2]_[AR] ;SAVE REMAINDER ; 5315 [AR]_#, ;ASSUME NEGATIVE ADJ U 3007, 3010,3771,0003,4374,4007,0700,0000,0077,7777 ; 5316 #/777777 ;EXTEND SIGN ; 5317 AD/D+Q, ;BR_(P/S)+((36-P)/S) ; 5318 DEST/AD, ; .. ; 5319 B/BR, ; .. ; 5320 RAMADR/#, ; .. ; 5321 DBUS/RAM, ; .. ; 5322 WORK/ADJQ1, ; .. ; 5323 4T, ; .. U 3010, 0570,0661,0005,7274,4007,0622,0000,0000,0224 ; 5324 SKIP AD.EQ.0 ;SEE IF ZERO ; 5325 =0 Q_Q+AC, ;GET ADJUSTMENT ; 5326 SC_34., ;STEP COUNT ; 5327 SKIP DP0, ;GO DO DIVIDE ; 5328 4T, ;WAIT FOR DP U 0570, 0574,0662,0000,0274,4007,0522,2000,0071,0042 ; 5329 J/ADJBP3 ;BELOW U 0571, 0127,4443,0000,4174,4467,0700,0000,0051,1000 ; 5330 NO DIVIDE ;0 BYTES/WORD ; 5331 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 124 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 BYTE GROUP -- ADJUST BYTE POINTER ; 5332 ; 5333 ;WE NOW DIVIDE THE ADJUSTMENT BY THE BYTES PER WORD AND FORCE THE ; 5334 ; REMAINDER (R) TO BE A POSITIVE NUMBER (MUST NOT BE ZERO). THE ; 5335 ; QUOTIENT IS ADDED TO THE Y FIELD IN THE BYTE POINTER AND THE NEW ; 5336 ; P FIELD IS COMPUTED BY: ; 5337 ; ; 5338 ; ( ( 36-P )) ; 5339 ; NEW P = 36-((R * S) + RMDR( ---- )) ; 5340 ; ( ( S )) ; 5341 ; ; 5342 ;WE NOW HAVE BYTES/WORD IN BR AND ADJUSTMENT IN Q. DIVIDE TO GET ; 5343 ; WORDS TO ADJUST BY. ; 5344 =00 ; 5345 ADJBP3: [AR]_#, ;POSITIVE ADJUSTMENT U 0574, 0575,3771,0003,4374,4007,0700,0000,0000,0000 ; 5346 #/0. ; 5347 WORK[ADJBPW]_[BR], ;SAVE BYTES/WORD & COMPUTE U 0575, 0510,3333,0005,7174,4007,0700,0410,0000,0226 ; 5348 CALL [DIVSUB] ; ADJ/(BYTES/WORD) ; 5349 ;WE NOW WANT TO ADJUST THE REMAINDER SO THAT IT IS POSITIVE ; 5350 =11 Q_#, ;ONLY RIGHT HALF ; 5351 #/0, ; .. U 0577, 3011,3772,0000,4374,0007,0700,0000,0000,0000 ; 5352 HOLD RIGHT ; .. ; 5353 = ; 5354 READ [AR], ;ALREADY + U 3011, 0572,3333,0003,4174,4007,0421,0000,0000,0000 ; 5355 SKIP AD.LE.0 ; .. ; 5356 =0 ; 5357 ADJBP4: AD/D+Q, ;ADD Q TO POINTER AND STORE ; 5358 DEST/AD, ; .. ; 5359 B/BR, ;RESULT TO BR ; 5360 RAMADR/#, ;PTR IS IN RAM ; 5361 DBUS/RAM, ; .. ; 5362 WORK/ADJPTR, ; .. ; 5363 INH CRY18, ;JUST RH ; 5364 3T, ;WAIT FOR RAM U 0572, 3013,0661,0005,7274,4407,0701,0000,0000,0223 ; 5365 J/ADJBP5 ;CONTINUE BELOW ; 5366 Q_Q-1, ;NO--MAKE Q SMALLER U 0573, 3012,1002,0700,4170,4007,0700,4000,0000,0000 ; 5367 HOLD LEFT ; .. ; 5368 [AR]_[AR]+WORK[ADJBPW], ;MAKE REM BIGGER U 3012, 0572,0551,0303,7274,4007,0701,0000,0000,0226 ; 5369 J/ADJBP4 ;NOW HAVE + REMAINDER ; 5370 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 125 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 BYTE GROUP -- ADJUST BYTE POINTER ; 5371 ; 5372 ADJBP5: [BRX]_[AR], ;COMPUTE R*S U 3013, 3014,3441,0306,4174,4007,0700,2000,0071,0043 ; 5373 SC_35. ;STEP COUNT U 3014, 0602,3772,0000,7274,4007,0701,0000,0000,0222 ; 5374 Q_WORK[ADJS] ;GET S ; 5375 =01* [BRX]_[BRX]*.5 LONG, ;SHIFT OVER U 0602, 2646,3446,0606,4174,4007,0700,0010,0000,0000 ; 5376 CALL [MULSUB] ; .. ; 5377 AD/D+Q, ;AR_(R*S)+RMDR(36-P)/S ; 5378 DEST/AD, ; .. ; 5379 B/AR, ; .. ; 5380 RAMADR/#, ; .. ; 5381 3T, ; .. ; 5382 DBUS/RAM, ; .. U 0606, 3015,0661,0003,7274,4007,0701,0000,0000,0225 ; 5383 WORK/ADJR2 ; .. ; 5384 [AR]_(#-[AR])*2, ;COMPUTE 36-AR ; 5385 3T, ;AND START LEFT U 3015, 3016,2555,0303,4374,4007,0701,4000,0000,0044 ; 5386 #/36. ; .. ; 5387 [AR]_[AR] SWAP, ;PUT THE POSITION BACK U 3016, 3017,3770,0303,4344,4007,0700,2000,0071,0011 ; 5388 SC_9. ; .. ; 5389 [AR]_#, ;CLEAR JUNK FROM RH ; 5390 #/0, ; .. U 3017, 0600,3771,0003,4370,4007,0700,0000,0000,0000 ; 5391 HOLD LEFT ; .. ; 5392 =0 ; 5393 ADJBP6: [AR]_[AR]*2, ;LOOP OVER ALL BITS ; 5394 STEP SC, ; .. U 0600, 0600,3445,0303,4174,4007,0630,2000,0060,0000 ; 5395 J/ADJBP6 ; .. ; 5396 [BR]_[BR].AND.#, ; .. ; 5397 #/007777, ; .. U 0601, 3020,4551,0505,4374,0007,0700,0000,0000,7777 ; 5398 HOLD RIGHT ; .. ; 5399 AC_[AR].OR.[BR], ;ALL DONE U 3020, 1400,3113,0305,0174,4007,0700,0400,0000,0000 ; 5400 J/DONE ; 5401 .IFNOT/FULL ; 5402 ; 5403 ADJBP: UUO ;NO ADJBP IN SMALL ; 5404 ; MICROCODE ; 5405 .ENDIF/FULL ; 5406 ; 5407 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 126 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 BYTE GROUP -- ADJUST BYTE POINTER ; 5408 .NOBIN ; 5409 .TOC "BLT" ; 5410 ; 5411 ;THIS CODE PROVIDES A GUARANTEED RESULT IN AC ON COMPLETION OF ; 5412 ; THE TRANSFER (EXCEPT IN THE CASE AC IS PART OF BUT NOT THE LAST WORD ; 5413 ; OF THE DESTINATION BLOCK). WHEN AC IS NOT PART OF THE DESTINATION ; 5414 ; BLOCK, IT IS LEFT CONTAINING THE ADDRESSES OF THE FIRST WORD FOLLOWING ; 5415 ; THE SOURCE BLOCK (IN THE LH), AND THE FIRST WORD FOLLOWING THE DEST- ; 5416 ; INATION BLOCK (IN THE RH). IF AC IS THE LAST WORD OF THE DESTINATION ; 5417 ; BLOCK, IT WILL BE A COPY OF THE LAST WORD OF THE SOURCE BLOCK. ; 5418 ; 5419 ;IN ADDITION, A SPECIAL-CASE CHECK IS MADE FOR THE CASE IN WHICH EACH ; 5420 ; WORD STORED IS USED AS THE SOURCE OF THE NEXT TRANSFER. IN THIS CASE, ; 5421 ; ONLY ONE READ NEED BE PERFORMED, AND THAT DATA MAY BE STORED FOR EACH ; 5422 ; TRANSFER. THUS THE COMMON USE OF BLT TO CLEAR CORE IS SPEEDED UP. ; 5423 .BIN ; 5424 ; 5425 ;HERE TO SETUP FOR A BLT/UBABLT, AC IN BRX, E.A. IN AR ; 5426 ;RETURN 2 WITH ; 5427 ; AR FINAL ADDR ; 5428 ; ARX SRC ADDR ; 5429 ; BR FINAL CONTENTS OF AC ; 5430 ; BRX DST ADDR ; 5431 ; READ OF FIRST SRC WORD IN PROGRESS, STATE=BLT U 3021, 0604,3770,0604,4344,4007,0700,0000,0000,0000 ; 5432 SETBLT: [ARX]_[BRX] SWAP ;COPY AC TO ARX (DST,,SRC) ; 5433 =0 VMA_[ARX], ;ADDRESS OF FIRST WORD ; 5434 START READ, ; 5435 PXCT BLT SRC, U 0604, 3550,3443,0400,4174,4007,0700,0210,0004,0712 ; 5436 CALL [CLARXL] ;CLEAR THE LEFT HALF OF ; 5437 [BRX]_0, ; BOTH SRC AND DEST U 0605, 3022,4221,0006,4174,0007,0700,0000,0000,0000 ; 5438 HOLD RIGHT U 3022, 3023,2112,0306,4174,4007,0700,4000,0000,0000 ; 5439 Q_[AR]-[BRX] ;NUMBER OF WORDS TO MOVE U 3023, 3024,0001,0705,4174,4007,0700,0000,0000,0000 ; 5440 [BR]_Q+1 ;LENGTH +1 ; 5441 [BR]_[BR] SWAP, ;COPY TO BOTH HALFS U 3024, 3025,3770,0505,4344,0007,0700,0000,0000,0000 ; 5442 HOLD RIGHT ; 5443 [BR]_AC+[BR], ;FINAL AC U 3025, 3026,0551,0505,0274,4407,0701,0000,0000,0000 ; 5444 INH CRY18 ;KEEP AC CORRECT IF DEST IS 777777 U 3026, 0002,3771,0013,4370,4004,1700,0000,0000,0001 ; 5445 STATE_[BLT],RETURN [2] ;SET PAGE FAIL FLAGS ; 5446 ; 5447 .DCODE D 0251, 0000,1640,2100 ; 5448 251: I, J/BLT ; 5449 .UCODE ; 5450 ; 5451 1640: U 1640, 3021,3771,0006,0276,6007,0700,0010,0000,0000 ; 5452 BLT: [BRX]_AC,CALL [SETBLT] ;FETCH THE AC, SETUP BR, BRX, ARX, STATE ; 5453 1642: AC_[BR], ;STORE BACK IN AC U 1642, 3546,3440,0505,0174,4007,0700,0410,0000,0000 ; 5454 CALL [LOADQ] ;LOAD FIRST WORD INTO Q ; 5455 1643: [BR]_[ARX]+1000001, ;SRC+1 ; 5456 3T, U 1643, 3027,0551,0405,4370,4007,0701,0000,0000,0001 ; 5457 HOLD LEFT ; 5458 [BR]-[BRX], 3T, ; Check for core clearing case ; 5459 SKIP ADR.EQ.0, U 3027, 0610,2113,0506,4174,4007,0331,4000,0000,0000 ; 5460 J/BLTLP1 ; 5461 ; 5462 =0 ; This instruction is part of the loop for the normal case ; 5463 BLTLP1: VMA_[BRX], ;NOT CLEARING CORE, GET DEST ADR ; 5464 START WRITE, ;START TO STORE NEXT WORD ; 5465 PXCT BLT DEST, ;WHERE TO STORE U 0610, 0613,3443,0600,4174,4007,0700,0200,0003,0312 ; 5466 J/BLTGO ; 5467 U 0611, 3030,3771,0005,4354,4007,0700,0000,0000,0000 ; 5468 [BR]_VMA ; This is the clear core case. ; 5469 ; Fetch back source VMA with flags. ; 5470 VMA_[BRX], ; Start first write ; 5471 START WRITE, U 3030, 3031,3443,0600,4174,4007,0700,0200,0003,0312 ; 5472 PXCT BLT DEST ; 5473 [BR].XOR.VMA, ; Compare destination VMA flags with source ; 5474 SKIP DP0, 3T, ; flags to see if user mode bits match. U 3031, 0612,6553,0500,4354,4007,0521,0000,0000,0000 ; 5475 J/BLTCLR ; Skips if they mismatch into normal case. ; 5476 ; 5477 =0 ; 5478 BLTCLR: MEM WRITE, ; This instruction is part of the loop for ; 5479 MEM_Q, ; The clear core case. ; 5480 SKIP/-1 MS, ; 1 MS timer up? U 0612, 0616,3223,0000,4174,4007,0671,0200,0000,0002 ; 5481 J/BLTCL1 ; 5482 BLTGO: MEM WRITE, ;STORE U 0613, 3032,3223,0000,4174,4007,0701,0200,0000,0002 ; 5483 MEM_Q ; 5484 BLTGOT: [BRX]-[AR], ;BELOW E? U 3032, 0614,2113,0603,4174,4007,0521,4000,0000,0000 ; 5485 SKIP DP0, 3T ; 5486 =0 END BLT, U 0614, 1400,4221,0013,4170,4007,0700,0000,0000,0000 ; 5487 J/DONE U 0615, 3033,0111,0706,4174,4007,0700,0000,0000,0000 ; 5488 [BRX]_[BRX]+1 ; Update destination address ; 5489 VMA_[ARX]+1, ; and source address at the same time! ; 5490 LOAD VMA, ; 5491 PXCT BLT SRC, U 3033, 3034,0111,0704,4170,4007,0700,0200,0004,0712 ; 5492 START READ ; 5493 MEM READ, ; 5494 Q_MEM, U 3034, 0610,3772,0000,4365,5007,0700,0200,0000,0002 ; 5495 J/BLTLP1 ; 5496 ; 5497 =0 U 0616, 3032,4443,0000,4174,4007,0700,0000,0000,0000 ; 5498 BLTCL1: J/BLTGOT ;GO TAKE INTERRUPT ; 5499 [BRX]-[AR], ;BELOW E? ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 127 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 BLT U 0617, 0620,2113,0603,4174,4007,0521,4000,0000,0000 ; 5500 SKIP DP0, 3T ; 5501 =0 END BLT, ;NO--STOP BLT U 0620, 1400,4221,0013,4170,4007,0700,0000,0000,0000 ; 5502 J/DONE ; 5503 [ARX]_[ARX]+1, ;FOR PAGE FAIL LOGIC U 0621, 0622,0111,0704,4174,4007,0370,0000,0000,0000 ; 5504 SKIP IRPT ; 5505 =0 VMA_[BRX]+1, ; 5506 LOAD VMA, ; 5507 PXCT BLT DEST, ; 5508 START WRITE, ;YES--KEEP STORING U 0622, 0612,0111,0706,4170,4007,0700,0200,0003,0312 ; 5509 J/BLTCLR ; 5510 VMA_[BRX]+1, ;INTERRUPT ; 5511 LOAD VMA, ; 5512 PXCT BLT DEST, ; 5513 START WRITE, U 0623, 0613,0111,0706,4170,4007,0700,0200,0003,0312 ; 5514 J/BLTGO ; 5515 ; 5516 ; Cleanup dispatch for BLT does: ; 5517 ; [AR]_WORK[SV.ARX], J/BLT-CLEANUP ; 5518 ; (Remember, you can't touch BRX here!) ; 5519 BLT-CLEANUP: U 3035, 3036,3770,0303,4344,4007,0700,0000,0000,0000 ; 5520 [AR]_[AR] SWAP ;PUT SRC IN LEFT HALF ; 5521 [AR]_WORK[SV.BRX], U 3036, 3037,3771,0003,7270,4007,0701,0000,0000,0214 ; 5522 HOLD LEFT ; 5523 AC_[AR], ;STORE THE AC AND RETURN U 3037, 2520,3440,0303,0174,4007,0700,0400,0000,0000 ; 5524 J/CLEANED ; 5525 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 128 ; DSK: KSHACK; SIMPLE 41 22:17:15 16-JAN-87 BLT ; 5526 ; 5527 .TOC "UBABLT - BLT BYTES TO/FROM UNIBUS FORMAT" ; 5528 ; 5529 ;THESE INSTRUCTION MOVE WORDS FROM BYTE TO UNIBUS AND UNIBUS TO BYTE ; 5530 ;FORMAT. FORMATS ARE: ; 5531 ; ; 5532 ;BYTE FORMAT: ; 5533 ; ; 5534 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 5535 ; ;; BYTE 0 ;; BYTE 1 ;; BYTE 2 ;; BYTE 3 ;; 4 BITS ;; ; 5536 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 5537 ; ; 5538 ;UNIBUS FORMAT: ; 5539 ; ; 5540 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 5541 ; ;; 2 BITS ;; BYTE 1 ;; BYTE 0 ;; 2 BITS ;; BYTE 3 ;; BYTE 2 ;; ; 5542 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; 5543 ; ; 5544 ; 5545 ;---This DEC code seems to have been written by someone who didn't understand macros ; 5546 ; 5547 =0* ; 5548 BLTX: [BRX]_AC, ;FETCH THE AC (DEST IN RH) U 0624, 3021,3771,0006,0276,6007,0700,0010,0000,0000 ; 5549 CALL [SETBLT] ;DO THE REST OF THE SETUP U 0626, 3040,3440,0505,0174,4007,0700,0400,0000,0000 ; 5550 AC_[BR] ;STORE THE FINAL AC IN AC ; 5551 BLTXLP: MEM READ, ;READ THE SOURCE WORD ; 5552 Q_MEM, ;FROM MEMORY U 3040, 0636,3772,0000,4365,5003,7700,0200,0000,0002 ; 5553 B DISP ;SKIP IF BLTUB (OPCODE 717) ; 5554 =110 Q_Q*.5, ;BLTBU (OPCODE 716) - SHIFT RIGHT 1 BIT U 0636, 3046,3446,1200,4174,4007,0700,0000,0000,0000 ; 5555 J/BLTBU1 ;CONTINUE INSTRUCTION ; 5556 AD/D.AND.Q,DBUS/DBM, ;BLTUB - MASK LOW BYTES, SHIFT LEFT U 0637, 0630,4665,0017,4374,4007,0700,0000,0000,0377 ; 5557 DBM/#,#/377,DEST/AD*2,B/T1 ;AND STORE RESULT ; 5558 =00 FE_S#,S#/1767, ;-9 MORE BITS TO PUT LOW BYTE OF LH U 0630, 3053,4443,0000,4174,4007,0700,1010,0071,1767 ; 5559 CALL [T1LSH] ; IN TOP OF LH SHIFT LEFT ; 5560 =01 FE_S#,S#/1772, ;-6 BITS TO PUT HI BYTE TO RIGHT U 0631, 3054,4443,0000,4174,4007,0700,1010,0071,1772 ; 5561 CALL [Q_RSH] ; OF LOW BYTE. U 0633, 3041,4662,0000,4374,4007,0700,0000,0000,1774 ; 5562 =11 Q_Q.AND.#,#/001774 ;KEEP ONLY HI BYTES ; 5563 = ; 5564 AD/A.OR.Q,A/T1,DEST/AD, ;MERGE PAIRS OF BYTES. NOW SWAPPED, U 3041, 3042,3001,1717,4174,4007,0700,0000,0000,0000 ; 5565 B/T1 ;BUT STILL IN HALF-WORDS ; 5566 AD/57,RSRC/0A,A/T1, ;CLEAR LH OF Q WHILE LOADING U 3042, 3043,5742,1700,4174,4007,0700,0000,0000,0000 ; 5567 DEST/Q_AD ;RH WITH LOW WORD U 3043, 3044,3444,0012,4174,4007,0700,0000,0000,0000 ; 5568 Q_Q*2 ;SHIFT LOW WORD ACROSS 1/2 WORD U 3044, 3045,3444,0012,4174,4007,0700,0000,0000,0000 ; 5569 Q_Q*2 ;AND INTO FINAL POSITION ; 5570 [T1]_[T1].AND.# CLR RH, ;CLEAR ALL BUT HIGH 16-BIT WORD U 3045, 3052,4521,1717,4374,4007,0700,0000,0077,7774 ; 5571 #/777774,J/BLTXV ;FROM T1 AND CONTINUE U 3046, 3047,3446,1200,4174,4007,0700,0000,0000,0000 ; 5572 BLTBU1: Q_Q*.5 ;NOW IN 1/2 WORDS U 3047, 3050,3446,1200,4170,4007,0700,0000,0000,0000 ; 5573 Q_Q*.5,HOLD LEFT ;INSERT A NULL BIT IN RH U 3050, 3051,3446,1200,4170,4007,0700,0000,0000,0000 ; 5574 Q_Q*.5,HOLD LEFT ;ONE MORE - NOW IN HALF WORDS ; 5575 AD/D.AND.Q,DBUS/DBM, ;BUT NOT SWAPPED. COPY RIGHT BYTE U 3051, 0640,4665,0017,4374,4007,0700,0000,0000,0377 ; 5576 DBM/#,#/377,DEST/AD*2,B/T1 ;TO T1 AND SHIFT LEFT 1 POSITION ; 5577 =00 FE_S#,S#/1771, ;-7 BITS MORE U 0640, 3053,4443,0000,4174,4007,0700,1010,0071,1771 ; 5578 CALL [T1LSH] ;TO FINAL RESTING PLACE ; 5579 =01 FE_S#,S#/1770, ;-8. LEFT BYTES MOVE RIGHT U 0641, 3054,4443,0000,4174,4007,0700,1010,0071,1770 ; 5580 CALL [Q_RSH] ;TO FINAL RESTING PLACE U 0643, 3052,4662,0000,4374,4007,0700,0000,0000,0377 ; 5581 =11 Q_Q.AND.#,#/377 ;WANT ONLY THE NEW BYTES ; 5582 = ; 5583 BLTXV: Q_[T1].OR.Q, ;MERGE RESULTS U 3052, 3055,3002,1700,4174,4007,0700,0000,0000,0000 ; 5584 J/BLTXW ;AND STUFF IN MEMORY U 3053, 0001,3445,1717,4174,4004,1700,1020,0041,0001 ; 5585 T1LSH: [T1]_[T1]*2,SHIFT,RETURN [1] U 3054, 0002,3446,1200,4174,4004,1700,1020,0041,0001 ; 5586 Q_RSH: Q_Q*.5,SHIFT,RETURN [2] ; 5587 BLTXW: VMA_[BRX],START WRITE, ;DEST TO VMA U 3055, 3056,3443,0600,4174,4007,0700,0200,0003,0312 ; 5588 PXCT BLT DEST U 3056, 3057,3223,0000,4174,4007,0701,0200,0000,0002 ; 5589 MEM WRITE,MEM_Q ;STORE U 3057, 0634,2113,0603,4174,4007,0521,4000,0000,0000 ; 5590 [BRX]-[AR],3T,SKIP DP0 ;DONE? U 0634, 1400,4221,0013,4170,4007,0700,0000,0000,0000 ; 5591 =0 END BLT,J/DONE ;YES U 0635, 3060,0111,0706,4174,4007,0700,0000,0000,0000 ; 5592 [BRX]_[BRX]+1 ;NO, INC DEST ; 5593 VMA_[ARX]+1,LOAD VMA, ; AND SOURCE (LOADING VMA) ; 5594 PXCT BLT SRC,START READ, ;START UP MEMORY U 3060, 3040,0111,0704,4170,4007,0700,0200,0004,0712 ; 5595 J/BLTXLP ;AND CONTINUE WITH NEXT WORD ; 5596 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 129 ; DSK: KSHACK; FLT 5 21:53:03 16-JAN-87 UBABLT - BLT BYTES TO/FROM UNIBUS FORMAT ; 5597 ;;;-*-Fundamental-*- ; 5598 ; 5599 .TOC "FLOATING POINT -- FAD, FSB" ; 5600 ; 5601 .DCODE D 0140, 0701,1577,1100 ; 5602 140: FL-R, FL-AC, J/FAD D 0142, 0702,1577,1700 ; 5603 142: FL-RW, FL-MEM, J/FAD D 0143, 0703,1577,1700 ; 5604 FL-RW, FL-BOTH, J/FAD D 0144, 0711,1577,1100 ; 5605 FL-R, FL-AC, ROUND, J/FAD D 0145, 0611,1577,0100 ; 5606 FL-I, FL-AC, ROUND, J/FAD D 0146, 0712,1577,1700 ; 5607 FL-RW, FL-MEM, ROUND, J/FAD D 0147, 0713,1577,1700 ; 5608 FL-RW, FL-BOTH, ROUND, J/FAD ; 5609 D 0150, 0701,1576,1100 ; 5610 150: FL-R, FL-AC, J/FSB D 0152, 0702,1576,1700 ; 5611 152: FL-RW, FL-MEM, J/FSB D 0153, 0703,1576,1700 ; 5612 FL-RW, FL-BOTH, J/FSB D 0154, 0711,1576,1100 ; 5613 FL-R, FL-AC, ROUND, J/FSB D 0155, 0611,1576,0100 ; 5614 FL-I, FL-AC, ROUND, J/FSB D 0156, 0712,1576,1700 ; 5615 FL-RW, FL-MEM, ROUND, J/FSB D 0157, 0713,1576,1700 ; 5616 FL-RW, FL-BOTH, ROUND, J/FSB ; 5617 .UCODE ; 5618 ; 5619 ;BOTH FAD & FSB ARE ENTERED WITH THE MEMORY OPERAND IN AR ; 5620 ; SIGN SMEARED. THE EXPONENT IN BOTH SC AND FE. ; 5621 1576: U 1576, 1577,2441,0303,4174,4007,0700,4000,0000,0000 ; 5622 FSB: [AR]_-[AR] ;MAKE MEMOP NEGATIVE ; 5623 ; 5624 1577: U 1577, 0625,3771,0005,0276,6006,7701,2000,0020,2000 ; 5625 FAD: [BR]_AC, SC_SC-EXP-1, 3T, SCAD DISP ; 5626 =0* U 0625, 0646,3333,0005,4174,4007,0520,0000,0000,0000 ; 5627 FAS1: READ [BR], SKIP DP0, J/FAS2 ;BR .LE. AR U 0627, 3061,3441,0304,4174,4007,0700,0000,0000,0000 ; 5628 [ARX]_[AR] ;SWAP AR AND BR U 3061, 3062,3441,0503,4174,4007,0700,2000,0041,2000 ; 5629 [AR]_[BR], SC_EXP U 3062, 3063,3441,0405,4174,4007,0700,2000,0020,0000 ; 5630 [BR]_[ARX], SC_SC-FE-1 ;NUMBER OF SHIFT STEPS U 3063, 0644,3333,0003,4174,4007,0520,1000,0041,2000 ; 5631 READ [AR], FE_EXP, 2T, SKIP DP0 U 0644, 3064,4551,0303,4374,0007,0700,0000,0000,0777 ; 5632 =0 [AR]_+SIGN, J/FAS3 U 0645, 3064,3551,0303,4374,0007,0700,0000,0077,7000 ; 5633 [AR]_-SIGN, J/FAS3 ; 5634 ; 5635 =0 ;SIGN SMEAR BR AND UNNORMALIZE U 0646, 3064,4551,0505,4374,0007,0700,0000,0000,0777 ; 5636 FAS2: [BR]_+SIGN, J/FAS3 U 0647, 3064,3551,0505,4374,0007,0700,0000,0077,7000 ; 5637 [BR]_-SIGN, J/FAS3 ; 5638 U 3064, 0650,4222,0000,4174,4007,0630,2000,0060,0000 ; 5639 FAS3: Q_0, STEP SC ; 5640 =0 U 0650, 0650,3446,0505,4174,4047,0630,2000,0060,0000 ; 5641 FAS4: [BR]_[BR]*.5 LONG, STEP SC, ASHC, J/FAS4 U 0651, 0740,0111,0503,4174,4003,4701,0000,0000,0000 ; 5642 [AR]_[AR]+[BR], NORM DISP, J/SNORM ; 5643 ; 5644 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 130 ; DSK: KSHACK; FLT 5 21:53:03 16-JAN-87 FLAOTING POINT -- FMP ; 5645 .TOC "FLAOTING POINT -- FMP" ; 5646 ; 5647 .DCODE D 0160, 0701,1570,1100 ; 5648 160: FL-R, FL-AC, J/FMP D 0162, 0702,1570,1700 ; 5649 162: FL-RW, FL-MEM, J/FMP D 0163, 0703,1570,1700 ; 5650 FL-RW, FL-BOTH, J/FMP ; 5651 D 0164, 0711,1570,1100 ; 5652 FL-R, FL-AC, ROUND, J/FMP D 0165, 0611,1570,0100 ; 5653 FL-I, FL-AC, ROUND, J/FMP D 0166, 0712,1570,1700 ; 5654 FL-RW, FL-MEM, ROUND, J/FMP D 0167, 0713,1570,1700 ; 5655 FL-RW, FL-BOTH, ROUND, J/FMP ; 5656 .UCODE ; 5657 ; 5658 1570: ; 5659 FMP: [BRX]_AC, ;GET AC ; 5660 FE_SC+EXP, 3T, ;EXPONENT OF ANSWER U 1570, 0652,3771,0006,0276,6007,0521,1000,0040,2000 ; 5661 SKIP DP0 ;GET READY TO SMEAR SIGN U 0652, 3065,4551,0606,4374,0007,0700,0000,0000,0777 ; 5662 =0 [BRX]_+SIGN, J/FMP1 ;POSITIVE U 0653, 3065,3551,0606,4374,0007,0700,0000,0077,7000 ; 5663 [BRX]_-SIGN, J/FMP1 ;NEGATIVE U 3065, 0603,3442,0300,4174,4007,0700,2000,0071,0033 ; 5664 FMP1: Q_[AR], SC_27. ;GET MEMORY OPERAND ; 5665 =01* [BRX]_[BRX]*.5 LONG, ;SHIFT RIGHT U 0603, 2646,3446,0606,4174,4007,0700,0010,0000,0000 ; 5666 CALL [MULSUB] ;MULTIPLY ; 5667 Q_Q.AND.#, #/777000, ;WE ONLY COMPUTED U 0607, 3066,4662,0000,4370,4007,0700,0000,0077,7000 ; 5668 HOLD LEFT ; 27 BITS U 3066, 3067,3441,0403,4174,4007,0700,1000,0041,0002 ; 5669 [AR]_[ARX], FE_FE+2 ;SET SHIFT PATHS ; 5670 [AR]_[AR]*.5 LONG, ;SHIFT OVER ; 5671 FE_FE-200, ;ADJUST EXPONENT U 3067, 0740,3446,0303,4174,4003,4701,1000,0041,1600 ; 5672 NORM DISP, J/SNORM ;NORMALIZE & EXIT ; 5673 ; 5674 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 131 ; DSK: KSHACK; FLT 5 21:53:03 16-JAN-87 FLOATING POINT -- FDV ; 5675 .TOC "FLOATING POINT -- FDV" ; 5676 ; 5677 .DCODE D 0170, 0701,1574,1100 ; 5678 170: FL-R, FL-AC, J/FDV D 0172, 0702,1574,1700 ; 5679 172: FL-RW, FL-MEM, J/FDV D 0173, 0703,1574,1700 ; 5680 FL-RW, FL-BOTH, J/FDV ; 5681 D 0174, 0711,1574,1100 ; 5682 FL-R, FL-AC, ROUND, J/FDV D 0175, 0611,1574,0100 ; 5683 FL-I, FL-AC, ROUND, J/FDV D 0176, 0712,1574,1700 ; 5684 FL-RW, FL-MEM, ROUND, J/FDV D 0177, 0713,1574,1700 ; 5685 FL-RW, FL-BOTH, ROUND, J/FDV ; 5686 .UCODE ; 5687 ; 5688 ; 5689 1574: U 1574, 0654,3441,0305,0174,4007,0621,0000,0000,0000 ; 5690 FDV: [BR]_[AR], SKIP AD.EQ.0, AC ;COPY DIVSOR SEE IF 0 ; 5691 =0 ; 5692 [AR]_AC, FE_SC-EXP, SKIP DP0, ;GET AC & COMPUTE NEW U 0654, 0656,3771,0003,0276,6007,0520,1000,0030,2000 ; 5693 J/FDV0 ; EXPONENT U 0655, 0127,4443,0000,4174,4467,0700,0000,0071,1000 ; 5694 FL NO DIVIDE ;DIVIDE BY ZERO ; 5695 =0 U 0656, 3070,4551,0303,4374,0007,0700,0000,0000,0777 ; 5696 FDV0: [AR]_+SIGN, J/FDV1 U 0657, 3071,3551,0303,4374,0007,0700,0000,0077,7000 ; 5697 [AR]_-SIGN, J/FDV2 U 3070, 3072,3441,0304,4174,4007,0700,1000,0031,0200 ; 5698 FDV1: [ARX]_[AR],FE_-FE+200,J/FDV3 ;COMPUTE 2*DVND U 3071, 3072,2441,0304,4174,4007,0700,5000,0031,0200 ; 5699 FDV2: [ARX]_-[AR],FE_-FE+200,J/FDV3 ;ABSOLUTE VALUE U 3072, 0660,3445,0506,4174,4007,0520,0000,0000,0000 ; 5700 FDV3: [BRX]_[BR]*2, SKIP DP0 ;ABSOLUTE VALUE ; 5701 =0 U 0660, 0662,2113,0406,4174,4007,0311,4000,0000,0000 ; 5702 FDV4: [ARX]-[BRX], SKIP CRY0, 3T, J/FDV5 ;FLOATING NO DIV? U 0661, 0660,2445,0506,4174,4007,0700,4000,0000,0000 ; 5703 [BRX]_-[BR]*2, J/FDV4 ;FORCE ABSOLUTE VALUE ; 5704 =0 U 0662, 0664,3447,0606,4174,4007,0700,0000,0000,0000 ; 5705 FDV5: [BRX]_[BRX]*.5, J/FDV6 ;SHIFT BACK ARX U 0663, 0127,4443,0000,4174,4467,0700,0000,0071,1000 ; 5706 FL NO DIVIDE ;UNNORMALIZED INPUT ; 5707 =0 ; 5708 FDV6: [AR]_[AR]*2, ;DO NOT DROP A BIT U 0664, 3552,3445,0303,4174,4007,0700,0010,0000,0000 ; 5709 CALL [SBRL] ;AT FDV7+1 U 0665, 0704,2113,0604,4174,4007,0421,4000,0000,0000 ; 5710 [BRX]-[ARX], SKIP AD.LE.0 ;IS ANSWER .LE. 1? ; 5711 =00100 U 0704, 2711,4222,0000,4174,4007,0700,2010,0071,0033 ; 5712 FDV7: Q_0, SC_27., CALL [DIVSGN] ;DIVIDE U 0705, 0704,3447,0303,4174,4007,0700,1000,0041,0001 ; 5713 =00101 [AR]_[AR]*.5, FE_FE+1, J/FDV7 ;SCALE DV'END ; 5714 =01100 U 0714, 3073,3227,0003,4174,4007,0700,0000,0000,0000 ; 5715 FDV8: [AR]_Q*.5, J/FDV9 ;PUT ANSWER IN AR ; 5716 =01101 READ [AR], SKIP AD.EQ.0, ;-VE ANSWER, LOOK AT RMDR U 0715, 1132,3333,0003,4174,4007,0621,0010,0000,0000 ; 5717 CALL [SETSN] ; SEE HOW TO NEGATE ; 5718 =01110 READ [AR], SKIP AD.EQ.0, ;-VE ANSWER, LOOK AT RMDR U 0716, 1132,3333,0003,4174,4007,0621,0010,0000,0000 ; 5719 CALL [SETSN] ; SEE HOW TO NEGATE U 0717, 3073,3227,0003,4174,4007,0700,0000,0000,0000 ; 5720 =01111 [AR]_Q*.5, J/FDV9 ;PUT ANSWER IN AR U 0737, 3073,2227,0003,4174,4007,0700,4000,0000,0000 ; 5721 =11111 [AR]_-Q*.5, J/FDV9 ;ZERO RMDR ; 5722 U 3073, 0675,4222,0000,4174,4007,0700,0000,0000,0000 ; 5723 FDV9: Q_0, J/SNORM0 ;GO NORMALIZE ; 5724 ; 5725 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 132 ; DSK: KSHACK; FLT 5 21:53:03 16-JAN-87 FLOATING POINT -- FLTR, FSC ; 5726 .TOC "FLOATING POINT -- FLTR, FSC" ; 5727 ; 5728 .DCODE D 0127, 0011,1616,1100 ; 5729 127: R, FL-AC,ROUND, J/FLTR D 0132, 0001,1621,2100 ; 5730 132: I, FL-AC, J/FSC ; 5731 .UCODE ; 5732 ; 5733 1616: U 1616, 0666,4553,0300,4374,4007,0321,0000,0077,7000 ; 5734 FLTR: [AR].AND.#, #/777000, 3T, SKIP ADL.EQ.0 ;SMALL POS NUMBER? U 0666, 0670,2441,0305,4174,4007,0521,4000,0000,0000 ; 5735 =0 [BR]_-[AR], SKIP DP0, 3T, J/FLTR1 ;NO--SEE IF MINUS U 0667, 0675,4222,0000,4174,4007,0700,1000,0071,0233 ; 5736 Q_0, FE_S#, S#/233, J/SNORM0 ;FITS IN 27 BITS ; 5737 =0 ; 5738 FLTR1: [BR].AND.#, #/777000, 3T, U 0670, 0672,4553,0500,4374,4007,0321,0000,0077,7000 ; 5739 SKIP ADL.EQ.0, J/FLTR1A ;SMALL NEGATIVE NUMBER U 0671, 3074,4222,0000,4174,4007,0700,1000,0071,0244 ; 5740 Q_0, FE_S#, S#/244, J/FLTR2 ;LARGE POS NUMBER ; 5741 =0 U 0672, 3074,4222,0000,4174,4007,0700,1000,0071,0244 ; 5742 FLTR1A: Q_0, FE_S#, S#/244, J/FLTR2 ;BIG NUMBER U 0673, 0675,4222,0000,4174,4007,0700,1000,0071,0233 ; 5743 Q_0, FE_S#, S#/233, J/SNORM0 ;FITS IN 27 BITS ; 5744 ;AT THIS POINT WE KNOW THE NUMBER TAKES MORE THAN 27 BITS. WE JUST ; 5745 ; SHIFT 8 PLACES RIGHT AND NORMALIZE. WE COULD BE MORE CLEVER BUT ; 5746 ; THIS IS THE RARE CASE ANYWAY. U 3074, 0674,3446,0303,4174,4047,0700,2000,0071,0006 ; 5747 FLTR2: [AR]_[AR]*.5 LONG, ASHC, SC_6 ;SHOVE OVER TO THE RIGHT ; 5748 =0 ; 5749 FLTR3: [AR]_[AR]*.5 LONG, ASHC, ;SHIFT RIGHT 9 PLACES U 0674, 0674,3446,0303,4174,4047,0630,2000,0060,0000 ; 5750 STEP SC, J/FLTR3 ; SO IT WILL FIT U 0675, 0740,3333,0003,4174,4003,4701,0000,0000,0000 ; 5751 SNORM0: READ [AR], NORM DISP, J/SNORM ;NORMALIZE ANSWER ; 5752 ; 5753 ; 5754 1621: U 1621, 3075,3333,0003,4174,4007,0700,2000,0041,4000 ; 5755 FSC: READ [AR], SC_SHIFT U 3075, 3076,4222,0000,0174,4007,0700,0000,0000,0000 ; 5756 Q_0, AC ;DON'T SHIFT IN JUNK U 3076, 0676,3771,0003,0276,6007,0520,1000,0040,2000 ; 5757 [AR]_AC, FE_SC+EXP, SKIP DP0 ;SIGN SMEAR U 0676, 0675,4551,0303,4374,0007,0700,0000,0000,0777 ; 5758 =0 [AR]_+SIGN, J/SNORM0 U 0677, 0675,3551,0303,4374,0007,0700,0000,0077,7000 ; 5759 [AR]_-SIGN, J/SNORM0 ; 5760 ; 5761 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 133 ; DSK: KSHACK; FLT 5 21:53:03 16-JAN-87 FLOATING POINT -- FIX AND FIXR ; 5762 .TOC "FLOATING POINT -- FIX AND FIXR" ; 5763 ; 5764 .DCODE D 0122, 0701,1626,1100 ; 5765 122: FL-R, FL-AC, J/FIX D 0126, 0711,1626,1100 ; 5766 126: FL-R, FL-AC,ROUND, J/FIX ; 5767 .UCODE ; 5768 ; 5769 1626: ; 5770 FIX: Q_0, SCAD/A+B, SCADA/S#, ;CLEAR Q, SEE IF ; 5771 S#/1534, SCADB/FE, 3T, ; ANSWER FITS IN U 1626, 0700,4222,0000,4174,4006,7701,0000,0041,1534 ; 5772 SCAD DISP ; 35 BITS. U 0700, 0127,4443,0000,4174,4467,0700,0000,0041,1000 ; 5773 =0* SET AROV, J/NIDISP ;TOO BIG U 0702, 0701,4443,0000,4174,4006,7701,2000,0041,1544 ; 5774 SC_FE+S#, S#/1544, 3T, SCAD DISP ;NEED TO MOVE LEFT? U 0701, 0710,4443,0000,4174,4007,0630,2000,0060,0000 ; 5775 =0* STEP SC, J/FIXL U 0703, 3077,4443,0000,4174,4007,0700,2000,0031,0232 ; 5776 SC_S#-FE, S#/232 ;NUMBER OF PLACES TO SHIFT ; 5777 ; RIGHT U 3077, 0706,4443,0000,4174,4007,0630,2000,0060,0000 ; 5778 STEP SC ;ALREADY THERE ; 5779 =0 ; 5780 FIXR: [AR]_[AR]*.5 LONG, ASHC, ;SHIFT BINARY POINT U 0706, 0706,3446,0303,4174,4047,0630,2000,0060,0000 ; 5781 STEP SC, J/FIXR ; TO BIT 35.5 U 0707, 0723,3447,0705,4174,4003,7700,0000,0000,0000 ; 5782 [BR]_[ONE]*.5, B DISP, J/FIXX ;WHICH KIND OF FIX? ; 5783 ; 5784 =0 U 0710, 0710,3445,0303,4174,4007,0630,2000,0060,0000 ; 5785 FIXL: [AR]_[AR]*2, STEP SC, J/FIXL ;SHIFT LEFT U 0711, 0060,3440,0303,0174,4156,4700,0400,0000,0000 ; 5786 AC_[AR], NEXT INST ;WE ARE NOW DONE ; 5787 ; 5788 =0*11 U 0723, 0712,3333,0003,4174,4007,0520,0000,0000,0000 ; 5789 FIXX: READ [AR], SKIP DP0, J/FIXT ;FIX--SEE IF MINUS U 0733, 1514,0111,0503,4174,4003,7700,0200,0003,0001 ; 5790 FIXX1: [AR]_[AR]+[BR], FL-EXIT ;FIXR--ROUND UP ; 5791 =0 U 0712, 0060,3440,0303,0174,4156,4700,0400,0000,0000 ; 5792 FIXT: AC_[AR], NEXT INST ;FIX & +, TRUNCATE U 0713, 0720,3223,0000,4174,4007,0621,0000,0000,0000 ; 5793 READ Q, SKIP AD.EQ.0 ;NEGATIVE--ANY FRACTION? U 0720, 1514,0111,0703,4174,4003,7700,0200,0003,0001 ; 5794 =0 [AR]_[AR]+1, FL-EXIT ;YES--ROUND UP ; 5795 [BR]_.NOT.[MASK], ;MAYBE--GENERATE .75 U 0721, 0733,7441,1205,4174,4007,0700,0000,0000,0000 ; 5796 J/FIXX1 ;ROUND UP IF BIT 36 OR ; 5797 ; 37 SET ; 5798 ; 5799 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 134 ; DSK: KSHACK; FLT 5 21:53:03 16-JAN-87 FLOATING POINT -- SINGLE PRECISION NORMALIZE ; 5800 .TOC "FLOATING POINT -- SINGLE PRECISION NORMALIZE" ; 5801 ; 5802 ;NORMALIZE DISPATCH IS A 9-WAY DISPATCH. THE HARDWARE LOOKS AT ; 5803 ; 4 SIGNALS: DP=0, DP BIT 8, DP BIT 9, DP BIT -2. THE 9 CASES ; 5804 ; ARE: ; 5805 ; 5806 ; DP=0 DP08 DP09 DP00 ACTION TO TAKE ; 5807 ; 0 0 0 0 SHIFT LEFT ; 5808 ; ; 5809 ; 0 0 0 1 NEGATE AND RETRY ; 5810 ; ; 5811 ; 0 0 1 0 ALL DONE ; 5812 ; ; 5813 ; 0 0 1 1 NEGATE AND RETRY ; 5814 ; ; 5815 ; 0 1 0 0 SHIFT RIGHT ; 5816 ; ; 5817 ; 0 1 0 1 NEGATE AND RETRY ; 5818 ; ; 5819 ; 0 1 1 0 SHIFT RIGHT ; 5820 ; ; 5821 ; 0 1 1 1 NEGATE AND RETRY ; 5822 ; ; 5823 ; 1 - - - LOOK AT Q BITS ; 5824 ; 5825 ;ENTER HERE WITH UNNORMALIZED NUMBER IN AR!Q. FE HOLDS THE NEW ; 5826 ; EXPONENT. CALL WITH NORM DISP ; 5827 =0000 ;9-WAY DISPATCH U 0740, 0740,3444,0303,4174,4063,4701,1000,0041,1777 ; 5828 SNORM: [AR]_[AR]*2 LONG, DIV, FE_FE-1, NORM DISP, J/SNORM U 0741, 0726,2222,0000,4174,4007,0311,4000,0000,0000 ; 5829 Q_-Q, SKIP CRY0, 3T, J/SNNEG U 0742, 0732,3333,0003,4174,4003,4701,0010,0000,0000 ; 5830 READ [AR], NORM DISP, CALL [SROUND] U 0743, 0726,2222,0000,4174,4007,0311,4000,0000,0000 ; 5831 Q_-Q, SKIP CRY0, 3T, J/SNNEG U 0744, 0732,3447,0303,4174,4007,0700,1010,0041,0001 ; 5832 [AR]_[AR]*.5, FE_FE+1, CALL [SROUND] U 0745, 0726,2222,0000,4174,4007,0311,4000,0000,0000 ; 5833 Q_-Q, SKIP CRY0, 3T, J/SNNEG U 0746, 0732,3447,0303,4174,4007,0700,1010,0041,0001 ; 5834 [AR]_[AR]*.5, FE_FE+1, CALL [SROUND] U 0747, 0726,2222,0000,4174,4007,0311,4000,0000,0000 ; 5835 Q_-Q, SKIP CRY0, 3T, J/SNNEG U 0750, 0724,3223,0000,4174,4007,0621,0000,0000,0000 ; 5836 READ Q, SKIP AD.EQ.0, J/SNORM1 U 0756, 0725,3770,0303,4324,0457,0700,0000,0041,0000 ; 5837 =1110 [AR]_EXP, J/FLEX ; 5838 = ; 5839 =0 U 0724, 0740,3444,0303,4174,4063,4701,1000,0041,1777 ; 5840 SNORM1: [AR]_[AR]*2 LONG, DIV, FE_FE-1, NORM DISP, J/SNORM U 0725, 1514,4443,0000,4174,4003,7700,0200,0003,0001 ; 5841 FLEX: FL-EXIT ; 5842 ; 5843 =0 U 0726, 0760,7441,0303,4174,4003,4701,0000,0000,0000 ; 5844 SNNEG: [AR]_.NOT.[AR], NORM DISP, J/SNNORM ;NEGATE HIGH WORD ; 5845 ; (NO CARRY) U 0727, 0760,2441,0303,4174,4003,4701,4000,0000,0000 ; 5846 [AR]_-[AR], NORM DISP, J/SNNORM ;NEGATE HIGH WORD (W/CARRY) ; 5847 =0000 U 0760, 0760,3444,0303,4174,4063,4701,1000,0041,1777 ; 5848 SNNORM: [AR]_[AR]*2 LONG, DIV, FE_FE-1, NORM DISP, J/SNNORM U 0762, 0732,3333,0003,4174,4003,4701,0010,0000,0000 ; 5849 =0010 READ [AR], NORM DISP, CALL [SROUND] U 0764, 0732,3447,0303,4174,4007,0700,1010,0041,0001 ; 5850 =0100 [AR]_[AR]*.5, FE_FE+1, CALL [SROUND] U 0766, 0732,3447,0303,4174,4007,0700,1010,0041,0001 ; 5851 =0110 [AR]_[AR]*.5, FE_FE+1, CALL [SROUND] U 0770, 0760,3444,0303,4174,4063,4701,1000,0041,1777 ; 5852 =1000 [AR]_[AR]*2 LONG, DIV, FE_FE-1, NORM DISP, J/SNNORM ;[120] U 0776, 0767,3770,0303,4324,0453,7700,0000,0041,0000 ; 5853 =1110 [AR]_EXP, B DISP ; 5854 = U 0767, 0730,4553,1300,4374,4007,0321,0000,0000,2000 ; 5855 =0111 TL [FLG], FLG.SN/1, J/SNNOT ; 5856 [AR]_[AR].AND.[MASK], ;CLEAR ANY LEFT OVER BITS U 0777, 0735,4111,1203,4174,4007,0700,0000,0000,0000 ; 5857 J/SNNOT1 ; 5858 =0 U 0730, 3100,7441,0303,4174,4007,0700,0000,0000,0000 ; 5859 SNNOT: [AR]_.NOT.[AR], J/SNNOT2 U 0731, 0734,3223,0000,4174,4007,0621,0000,0000,0000 ; 5860 READ Q, SKIP AD.EQ.0 U 0734, 3100,7441,0303,4174,4007,0700,0000,0000,0000 ; 5861 =0 [AR]_.NOT.[AR], J/SNNOT2 U 0735, 3100,2441,0303,4174,4007,0700,4000,0000,0000 ; 5862 SNNOT1: [AR]_-[AR], J/SNNOT2 ;NORMAL NEGATE AND EXIT U 3100, 3101,5551,1313,4374,0007,0700,0000,0000,2000 ; 5863 SNNOT2: [FLG]_[FLG].AND.NOT.#, FLG.SN/1, HOLD RIGHT U 3101, 1514,4443,0000,4174,4003,7700,0200,0003,0001 ; 5864 FL-EXIT ; 5865 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 135 ; DSK: KSHACK; FLT 5 21:53:03 16-JAN-87 FLOATING POINT -- ROUND ANSWER ; 5866 .TOC "FLOATING POINT -- ROUND ANSWER" ; 5867 ; 5868 =*01* U 0732, 1007,3447,0705,4174,4003,7700,0000,0000,0000 ; 5869 SROUND: [BR]_[ONE]*.5, B DISP, J/SRND1 U 0736, 0732,3447,0303,4174,4007,0700,1000,0041,0001 ; 5870 [AR]_[AR]*.5, FE_FE+1, J/SROUND ;WE WENT TOO FAR ; 5871 =0111 U 1007, 0016,4443,0000,4174,4004,1700,0000,0000,0000 ; 5872 SRND1: RETURN [16] ;NOT ROUNDING INSTRUCTION U 1017, 0753,0111,0503,4174,4003,4701,0000,0000,0000 ; 5873 [AR]_[AR]+[BR], NORM DISP U 0753, 0016,4443,0000,4174,4004,1700,0000,0000,0000 ; 5874 =*01* RETURN [16] U 0757, 0016,3447,0303,4174,4004,1700,1000,0041,0001 ; 5875 [AR]_[AR]*.5, FE_FE+1, RETURN [16] ; 5876 ; 5877 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 136 ; DSK: KSHACK; FLT 5 21:53:03 16-JAN-87 FLOATING POINT -- DFAD, DFSB ; 5878 .TOC "FLOATING POINT -- DFAD, DFSB" ; 5879 ; 5880 .DCODE D 0110, 1100,1637,1100 ; 5881 110: DBL FL-R, J/DFAD D 0111, 1100,1635,1100 ; 5882 111: DBL FL-R, J/DFSB ; 5883 .UCODE ; 5884 ; 5885 ;ENTER FROM A-READ CODE WITH: ; 5886 ;FE/ EXP ; 5887 ;SC/ EXP ; 5888 ;AR/ C(E) SHIFT RIGHT 2 PLACES ; 5889 ;ARX/ C(E+1) SHIFTED RIGHT 1 PLACE ; 5890 1635: U 1635, 3102,2441,0404,4174,4007,0700,4000,0000,0000 ; 5891 DFSB: [ARX]_-[ARX] ;NEGATE LOW WORD U 3102, 1637,2441,0303,4174,4007,0700,0040,0000,0000 ; 5892 [AR]_-[AR]-.25, MULTI PREC/1 ; 5893 1637: U 1637, 3103,4557,0006,1274,4007,0701,0000,0000,1441 ; 5894 DFAD: [BRX]_(AC[1].AND.[MAG])*.5, 3T ;GET LOW WORD ; 5895 [BR]_AC*.5, 3T, ;GET AC AND START TO SHIFT ; 5896 SC_SC-EXP-1, ;NUMBER OF PLACES TO SHIFT U 3103, 0754,3777,0005,0274,4007,0521,2000,0020,2000 ; 5897 SKIP DP0 ;SEE WHAT SIGN ; 5898 =0 [BR]_+SIGN*.5, 3T, ;SIGN SMEAR U 0754, 0772,5547,0505,0374,4007,0631,0000,0077,7400 ; 5899 AC, SKIP/SC, J/DFAS1 ;SEE WHICH IS BIGGER ; 5900 [BR]_-SIGN*.5, 3T, ;SIGN SMEAR U 0755, 0772,3547,0505,0374,4007,0631,0000,0077,7400 ; 5901 AC, SKIP/SC, J/DFAS1 ;SEE WHICH IS BIGGER ; 5902 =0 ; 5903 DFAS1: Q_[BRX], ;AR IS BIGGER U 0772, 0774,3442,0600,4174,4007,0700,0000,0000,0000 ; 5904 J/DFAS2 ;ADJUST BR!Q ; 5905 [T0]_AC, ;BR IS BIGGER OR EQUAL U 0773, 3105,3771,0016,0276,6007,0700,2000,0041,2000 ; 5906 SC_EXP, 2T, J/DFAS3 ;SET SC TO THAT EXPONENT ; 5907 ; 5908 ;HERE IF AR!ARX IS GREATER THAN BR!BRX ; 5909 =0 U 0774, 1003,3441,0516,4174,4007,0700,0010,0000,0000 ; 5910 DFAS2: [T0]_[BR], CALL [DFADJ] ;ADJUST BR!Q U 0775, 3104,3441,1605,4174,4007,0700,0000,0000,0000 ; 5911 [BR]_[T0] ;PUT ANSWER BACK U 3104, 3110,0002,0400,4174,4007,0700,0000,0000,0000 ; 5912 Q_Q+[ARX], J/DFAS5 ;ADD LOW WORDS ; 5913 ; 5914 ;HERE IS BR!BRX IF GREATER THAN OR EQUAL TO AR!ARX ; 5915 DFAS3: Q_[ARX], ;SETUP TO SHIFT AR!ARX U 3105, 3106,3442,0400,4174,4007,0700,2000,0020,0000 ; 5916 SC_SC-FE-1 ;COMPUTE # OF PLACES U 3106, 1000,3333,0016,4174,4007,0700,1000,0041,2000 ; 5917 READ [T0], FE_EXP ;EXPONENT OF ANSWER U 1000, 1003,3441,0316,4174,4007,0700,0010,0000,0000 ; 5918 =0 [T0]_[AR], CALL [DFADJ] ;ADJUST AR!Q U 1001, 3107,3441,1603,4174,4007,0700,0000,0000,0000 ; 5919 [AR]_[T0] ;PUT ANSWER BACK U 3107, 3110,0002,0600,4174,4007,0700,0000,0000,0000 ; 5920 Q_Q+[BRX], J/DFAS5 ;ADD LOW WORDS ; 5921 ; 5922 ;BIT DIDDLE TO GET THE ANSWER (INCLUDING 2 GUARD BITS) INTO ; 5923 ; AR!Q ; 5924 DFAS5: [AR]_([AR]+[BR])*.5 LONG, ;ADD HIGH WORDS U 3110, 3111,0116,0503,4174,4047,0700,0040,0000,0000 ; 5925 MULTI PREC/1, ASHC ;INJECT SAVED CRY2 ; 5926 [AR]_[AR]*2 LONG, ;SHIFT BACK LEFT U 3111, 1033,3444,0303,4174,4046,2700,0000,0000,0000 ; 5927 ASHC, MUL DISP ;SEE IF WE LOST A 1 ; 5928 =1011 U 1033, 3112,5111,1217,4174,4007,0700,0000,0000,0000 ; 5929 DFAS6: [T1]_[T1].AND.NOT.[MASK], J/DFAS7 U 1037, 1033,0222,0000,4174,4007,0700,4000,0000,0000 ; 5930 Q_Q+.25, J/DFAS6 ; 5931 DFAS7: [AR]_[AR]*2 LONG, ASHC, ;PUT IN GUARD BITS U 3112, 3113,3444,0303,4174,4047,0700,1000,0041,1777 ; 5932 FE_FE-1 ; 5933 [AR]_[AR]*2 LONG, ASHC, U 3113, 3114,3444,0303,4174,4047,0700,1000,0041,1777 ; 5934 FE_FE-1 U 3114, 1027,3002,1700,4170,4007,0700,0000,0000,0000 ; 5935 Q_[T1].OR.Q, HOLD LEFT, J/DNORM0 ; 5936 ; 5937 ;SUBROUTINE TO ADJUST NUMBER IN T0!Q ; 5938 ;RETURNS 1 WITH ; 5939 ; T0!Q ADJUSTED ; 5940 ; FLG.SN=1 IF WE SHIFTED OUT ANY 1 BITS (STICKY BIT) ; 5941 ; T1 HAS Q TWO STEPS PRIOR TO BEING DONE ; 5942 DFADJ "STEP SC, ASHC, MUL DISP" ; 5943 ; 5944 =0**11 ; 5945 DFADJ: [T0]_[T0]*2 LONG, DIV, ;MOVE EVERYTHING 2 PLACES U 1003, 1133,3444,1616,4174,4067,0700,0010,0000,0000 ; 5946 CALL [CLRSN] U 1023, 3115,3444,1616,4174,4067,0700,0000,0000,0000 ; 5947 [T0]_[T0]*2 LONG, DIV U 3115, 3116,3444,1616,4174,4067,0700,0000,0000,0000 ; 5948 [T0]_[T0]*2 LONG, DIV ; 5949 [T0]_[T0]*.5 LONG, ASHC, ;SHIFT AT LEAST 1 PLACE U 3116, 1052,3446,1616,4174,4047,0630,2000,0060,0000 ; 5950 STEP SC ; 5951 =1010 ; 5952 DFADJ1: [T0]_[T0]*.5 LONG, ;UNNORMALIZE T0!Q U 1052, 1052,3446,1616,4174,4046,2630,2000,0060,0000 ; 5953 DFADJ, J/DFADJ1 ;LOOP TILL DONE ; 5954 DFADJ2: [T1]_Q, ;SAVE GUARD BITS U 1053, 1073,3221,0017,4174,4006,2700,0000,0000,0000 ; 5955 MUL DISP, J/DFADJ5 ;LOOK AT LAST BIT U 1056, 1004,3551,1313,4374,0007,0700,0000,0000,2000 ; 5956 [FLG]_[FLG].OR.#, FLG.SN/1, HOLD RIGHT, J/DFADJ3 U 1057, 1005,3551,1313,4374,0007,0700,0000,0000,2000 ; 5957 [FLG]_[FLG].OR.#, FLG.SN/1, HOLD RIGHT, J/DFADJ4 ; 5958 ; 5959 =0 U 1004, 1004,3446,1616,4174,4047,0630,2000,0060,0000 ; 5960 DFADJ3: [T0]_[T0]*.5 LONG, ASHC, STEP SC, J/DFADJ3 U 1005, 1073,3221,0017,4174,4007,0700,0000,0000,0000 ; 5961 DFADJ4: [T1]_Q ;SAVE 2 GUARD BITS ; 5962 =1011 U 1073, 3117,3446,1616,4174,4047,0700,0000,0000,0000 ; 5963 DFADJ5: [T0]_[T0]*.5 LONG, ASHC, J/DFADJ6 U 1077, 1073,3551,1313,4374,0007,0700,0000,0000,2000 ; 5964 [FLG]_[FLG].OR.#, FLG.SN/1, HOLD RIGHT, J/DFADJ5 U 3117, 0001,3446,1616,4174,4044,1700,0000,0000,0000 ; 5965 DFADJ6: [T0]_[T0]*.5 LONG, ASHC, RETURN [1] ; 5966 ; 5967 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 137 ; DSK: KSHACK; FLT 5 21:53:03 16-JAN-87 FLOATING POINT -- DFMP ; 5968 .TOC "FLOATING POINT -- DFMP" ; 5969 ; 5970 .DCODE D 0112, 1105,1631,1100 ; 5971 112: DBL FL-R, DAC, J/DFMP ; 5972 .UCODE ; 5973 ; 5974 ;SAME ENTRY CONDITIONS AS DFAD/DFSB ; 5975 1631: U 1631, 1010,3442,0400,4174,4007,0700,2000,0071,0006 ; 5976 DFMP: Q_[ARX], SC_6 ;SHIFT MEM OP 8 PLACES ; 5977 =0 ; 5978 DFMP1: [AR]_[AR]*2 LONG, ASHC, ;SHIFT U 1010, 1010,3444,0303,4174,4047,0630,2000,0060,0000 ; 5979 STEP SC, J/DFMP1 U 1011, 3120,3446,1200,4174,4007,0700,0000,0000,0000 ; 5980 Q_Q*.5 U 3120, 3121,4662,0000,4374,0007,0700,0000,0007,7777 ; 5981 Q_Q.AND.#, #/077777, HOLD RIGHT U 3121, 3122,3221,0005,4174,4007,0700,0000,0000,0000 ; 5982 [BR]_Q ;COPY LOW WORD ; 5983 ; ; 5984 ; BRX * BR ==> C(E+1) * C(AC+1) ; 5985 ; U 3122, 0531,4557,0006,1274,4007,0700,0000,0000,1441 ; 5986 [BRX]_(AC[1].AND.[MAG])*.5 ;GET LOW AC U 0531, 2647,3447,0606,4174,4007,0700,2010,0071,0043 ; 5987 =0** [BRX]_[BRX]*.5, SC_35., CALL [MULSB1] ; 5988 ; ; 5989 ; BRX * Q ==> C(E) * C(AC+1) ; 5990 ; U 0535, 0761,3442,0300,4174,4007,0700,2000,0071,0043 ; 5991 Q_[AR], SC_35. ;GO MULT NEXT HUNK U 0761, 2650,4443,0000,4174,4007,0700,0010,0000,0000 ; 5992 =0** CALL [MULTIPLY] U 0765, 3123,3441,0416,4174,4007,0700,0000,0000,0000 ; 5993 [T0]_[ARX] ;SAVE PRODUCT U 3123, 3124,3227,0004,4174,4007,0700,2000,0011,0000 ; 5994 [ARX]_Q*.5, SC_FE ;PUT IN NEXT STEP ; 5995 ; ; 5996 ; BRX * BR ==> C(AC) * C(E+1) ; 5997 ; ; 5998 [BRX]_AC*.5, ;PREPARE TO DO HIGH HALF ; 5999 FE_SC+EXP, ;EXPONENT ON ANSWER U 3124, 1012,3777,0006,0274,4007,0521,1000,0040,2000 ; 6000 SKIP DP0, 3T U 1012, 1002,5547,0606,4374,4007,0701,0000,0077,7400 ; 6001 =0 [BRX]_+SIGN*.5, 3T, J/DFMP2 U 1013, 1002,3547,0606,4374,4007,0701,0000,0077,7400 ; 6002 [BRX]_-SIGN*.5, 3T ; 6003 =0** U 1002, 2650,3442,0500,4174,4007,0700,2010,0071,0043 ; 6004 DFMP2: Q_[BR], SC_35., CALL [MULTIPLY] ;GO MULTIPLY U 1006, 3125,3221,0017,4174,4007,0700,0000,0000,0000 ; 6005 [T1]_Q ;SAVE FOR ROUNDING U 3125, 1020,0111,1604,4174,4007,0700,0000,0000,0000 ; 6006 [ARX]_[ARX]+[T0] ;PREPARE FOR LAST MUL ; 6007 ; ; 6008 ; BRX * Q ==> C(AC) * C(E) ; 6009 ; ; 6010 =0** Q_[AR], SC_35., ;DO THE LAST MULTIPLY U 1020, 2650,3442,0300,4174,4007,0700,2010,0071,0043 ; 6011 CALL [MULTIPLY] ; .. ; 6012 ; 6013 ;OK, WE NOW HAVE THE PRODUCT IN ARX!Q!T1. ALL WE NEED TO DO ; 6014 ; IS SOME BIT DIDDLES TO GET EVERYTHING IN THE RIGHT PLACE ; 6015 [AR]_[ARX]*.5 LONG, ;SHIFT THE ANSWER U 1024, 1043,3446,0403,4174,4007,0700,1000,0041,1576 ; 6016 FE_FE+S#, S#/1576 ;CORRECT EXPONENT ; 6017 =0**11 READ [T1], SKIP AD.EQ.0, ;SEE IF LOW ORDER 1 U 1043, 1132,3333,0017,4174,4007,0621,0010,0000,0000 ; 6018 CALL [SETSN] ; BITS AROUND SOMEPLACE U 1063, 3126,3444,0303,4174,4047,0700,0000,0000,0000 ; 6019 [AR]_[AR]*2 LONG, ASHC ;SHIFT LEFT U 3126, 3127,3447,0705,4174,4007,0700,0000,0000,0000 ; 6020 [BR]_[ONE]*.5 ;PLACE TO INSTERT BITS U 3127, 1014,4553,1700,4374,4007,0321,0000,0020,0000 ; 6021 TL [T1], #/200000 ;ANYTHING TO INJECT? U 1014, 1015,0002,0500,4174,4007,0700,0000,0000,0000 ; 6022 =0 Q_Q+[BR] ;YES--PUT IT IN U 1015, 3130,3444,0303,4174,4047,0700,0000,0000,0000 ; 6023 [AR]_[AR]*2 LONG, ASHC ;MAKE ROOM FOR MORE U 3130, 1026,4553,1700,4374,4007,0321,0000,0010,0000 ; 6024 TL [T1], #/100000 ;ANOTHER BIT NEEDED U 1026, 1027,0002,0500,4174,4007,0700,0000,0000,0000 ; 6025 =0 Q_Q+[BR] ;YES--PUT IN LAST BIT ; 6026 DNORM0: READ [AR], NORM DISP, ;SEE WHAT WE NEED TO DO U 1027, 1120,3333,0003,4174,4003,4701,1000,0041,0002 ; 6027 FE_FE+S#, S#/2, J/DNORM ;ADJUST FOR INITIAL SHIFTS ; 6028 ; 6029 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 138 ; DSK: KSHACK; FLT 5 21:53:03 16-JAN-87 FLOATING POINT -- DFDV ; 6030 .TOC "FLOATING POINT -- DFDV" ; 6031 ; 6032 .DCODE D 0113, 1105,1636,1100 ; 6033 113: DBL FL-R, DAC, J/DFDV ; 6034 .UCODE ; 6035 1636: U 1636, 1066,3441,0406,4174,4007,0700,0000,0000,0000 ; 6036 DFDV: [BRX]_[ARX] ;COPY OPERAND (COULD SAVE TIME ; 6037 ; WITH SEPERATE A-READ FOR DFDV) U 1066, 1133,4221,0017,4174,4007,0700,0010,0000,0000 ; 6038 =1**10 [T1]_0, CALL [CLRSN] ;CLEAR FLAG ; 6039 [BR]_[AR], SKIP AD.LE.0, ;SEE IF POSITIVE U 1067, 1030,3441,0305,1174,4007,0421,0000,0000,1441 ; 6040 AC[1] ;WARM UP RAM ; 6041 =0 ; 6042 DFDV1: [ARX]_(AC[1].AND.[MAG])*.5, ;POSITIVE--GET AC U 1030, 3133,4557,0004,1274,4007,0700,0000,0000,1441 ; 6043 J/DFDV2 ; AND CONTINUE BELOW U 1031, 3131,7441,1717,4174,4007,0700,0000,0000,0000 ; 6044 [T1]_.NOT.[T1] ;DV'SOR NEGATIVE (OR ZERO) U 3131, 3132,2441,0606,4174,4007,0700,4000,0000,0000 ; 6045 [BRX]_-[BRX] ;NEGATE LOW WORD ; 6046 AD/-B-.25, B/BR, DEST/AD, ;NEGATE HIGH WORD ; 6047 MULTI PREC/1, 3T, ;ADDING IN CRY02 ; 6048 SKIP DP0, AC[1], ;SEE IF STILL NEGATIVE U 3132, 1030,2331,0005,1174,4007,0521,0040,0000,1441 ; 6049 J/DFDV1 ; .. ; 6050 DFDV2: [AR]_AC*.5, ;GET AC AND SHIFT ; 6051 FE_SC-EXP, 3T, ;COMPUTE NEW EXPONENT U 3133, 1034,3777,0003,0274,4007,0521,1000,0030,2000 ; 6052 SKIP DP0 ;SEE IF NEGATIVE U 1034, 1040,5547,0303,4374,4007,0701,0000,0077,7400 ; 6053 =0 [AR]_+SIGN*.5, 3T, J/DFDV3 ;POSITIVE U 1035, 3134,7441,1717,4174,4007,0700,0000,0000,0000 ; 6054 [T1]_.NOT.[T1] ;NEGATIVE OR ZERO U 3134, 3135,3547,0303,4374,4007,0701,0000,0077,7400 ; 6055 [AR]_-SIGN*.5, 3T ;SIGN SMEAR U 3135, 3136,2442,0400,4174,4007,0700,4000,0000,0000 ; 6056 Q_-[ARX] ;NEGATE OPERAND ; 6057 [AR]_(-[AR]-.25)*.5 LONG, ;NEGATE HIGH WORD ; 6058 MULTI PREC/1, ;USE SAVED CARRY U 3136, 1041,2446,0303,4174,4047,0700,0040,0000,0000 ; 6059 ASHC, J/DFDV4 ;CONTINUE BELOW ; 6060 =0 ; 6061 DFDV3: Q_[ARX], ;COPY OPERAND U 1040, 2710,3442,0400,4174,4007,0700,0010,0000,0000 ; 6062 CALL [DDIVS] ;SHIFT OVER U 1041, 1044,2113,0305,4174,4007,0521,4000,0000,0000 ; 6063 DFDV4: [AR]-[BR], 3T, SKIP DP0 ;SEE IF OVERFLOW U 1044, 0127,4443,0000,4174,4467,0700,0000,0071,1000 ; 6064 =0 FL NO DIVIDE U 1045, 1060,3221,0004,4174,4007,0700,0000,0000,0000 ; 6065 [ARX]_Q ;START DIVISION U 1060, 0460,4222,0000,4174,4007,0700,2010,0071,0032 ; 6066 =0* Q_0, SC_26., CALL [DBLDIV] U 1062, 1070,3221,0016,4174,4007,0700,2000,0071,0043 ; 6067 [T0]_Q, SC_35. ; 6068 =0* Q_Q.AND.NOT.[MAG], ;SEE IF ODD ; 6069 SKIP AD.EQ.0, ;SKIP IF EVEN U 1070, 0460,5002,0000,4174,4007,0621,0010,0000,0000 ; 6070 CALL [DBLDIV] ;GO DIVIDE U 1072, 3137,3446,1200,4174,4007,0700,0000,0000,0000 ; 6071 Q_Q*.5 ;MOVE ANSWER OVER ; 6072 = ; 6073 [T0]_[T0]*2 LONG, ASHC, ;DO FIRST NORM STEP U 3137, 1113,3444,1616,4174,4046,2700,0000,0000,0000 ; 6074 MUL DISP ; SEE IF A 1 FELL OUT ; 6075 =1011 ; 6076 DFDV4A: READ [T1], SKIP DP0, ;SHOULD RESULT BE NEGATIVE ; 6077 FE_S#-FE, S#/202, ;CORRECT EXPONENT U 1113, 1046,3333,0017,4174,4007,0520,1000,0031,0202 ; 6078 J/DFDV4B ;LOOK BELOW U 1117, 1113,0222,0000,4174,4007,0700,4000,0000,0000 ; 6079 Q_Q+.25, J/DFDV4A ;PUT BACK THE BIT ; 6080 =0 U 1046, 1120,3441,1603,4174,4003,4701,0000,0000,0000 ; 6081 DFDV4B: [AR]_[T0], NORM DISP, J/DNORM ;PLUS U 1047, 1100,3441,1603,4174,4003,4701,0000,0000,0000 ; 6082 [AR]_[T0], NORM DISP, J/DNNORM ;MINUS ; 6083 ; 6084 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 139 ; DSK: KSHACK; FLT 5 21:53:03 16-JAN-87 FLOATING POINT -- DOUBLE PRECISION NORMALIZE ; 6085 .TOC "FLOATING POINT -- DOUBLE PRECISION NORMALIZE" ; 6086 ; 6087 ;NORMALIZE AR!Q ; 6088 ;DNORM0: READ [AR], NORM DISP, ;SEE WHAT WE NEED TO DO ; 6089 ; FE_FE+S#, S#/2, J/DNORM ;ADJUST FOR INITIAL SHIFTS ; 6090 =0000 ; 6091 DNORM: [AR]_[AR]*2 LONG, ;SHIFT LEFT ; 6092 FE_FE-1, ASHC, ;ADJUST EXPONENT U 1120, 1120,3444,0303,4174,4043,4701,1000,0041,1777 ; 6093 NORM DISP, J/DNORM ;TRY AGAIN U 1121, 1054,4553,1300,4374,4007,0321,0000,0000,2000 ; 6094 TL [FLG], FLG.SN/1, J/DNEG ;RESULT IS NEGATIVE ; 6095 READ [AR], NORM DISP, ;SEE IF WE WENT TOO FAR U 1122, 1032,3333,0003,4174,4003,4701,0010,0000,0000 ; 6096 CALL [DROUND] ; AND ROUND ANSWER U 1123, 1054,4553,1300,4374,4007,0321,0000,0000,2000 ; 6097 TL [FLG], FLG.SN/1, J/DNEG ;RESULT IS NEGATIVE ; 6098 [AR]_[AR]*.5 LONG, ASHC, U 1124, 1032,3446,0303,4174,4047,0700,1010,0041,0001 ; 6099 FE_FE+1, CALL [DROUND] U 1125, 1054,4553,1300,4374,4007,0321,0000,0000,2000 ; 6100 TL [FLG], FLG.SN/1, J/DNEG ;RESULT IS NEGATIVE ; 6101 [AR]_[AR]*.5 LONG, ASHC, U 1126, 1032,3446,0303,4174,4047,0700,1010,0041,0001 ; 6102 FE_FE+1, CALL [DROUND] U 1127, 1054,4553,1300,4374,4007,0321,0000,0000,2000 ; 6103 TL [FLG], FLG.SN/1, J/DNEG ;RESULT IS NEGATIVE ; 6104 Q_[MAG].AND.Q, ;HIGH WORD IS ZERO U 1130, 3141,4002,0000,4174,0007,0700,0000,0000,0000 ; 6105 HOLD RIGHT, J/DNORM1 ;GO TEST LOW WORD U 1136, 3140,5551,1313,4374,0007,0700,0000,0000,2000 ; 6106 =1110 [FLG]_[FLG].AND.NOT.#, FLG.SN/1, HOLD RIGHT ;[122] CLEAR FLG.SN ; 6107 = ; 6108 AC[1]_[ARX].AND.[MAG], ;STORE LOW WORD U 3140, 1515,4113,0400,1174,4007,0700,0400,0000,1441 ; 6109 J/STAC ;GO DO HIGH WORD ; 6110 U 3141, 1050,3223,0000,4174,4007,0621,0000,0000,0000 ; 6111 DNORM1: READ Q, SKIP AD.EQ.0 ;TEST LOW WORD ; 6112 =0 [AR]_[AR]*2 LONG, ;LOW WORD IS NON-ZERO ; 6113 FE_FE-1, ASHC, ;ADJUST EXPONENT U 1050, 1120,3444,0303,4174,4043,4701,1000,0041,1777 ; 6114 NORM DISP, J/DNORM ;KEEP LOOKING U 1051, 1515,3440,0303,1174,4007,0700,0400,0000,1441 ; 6115 AC[1]_[AR], J/STAC ;WHOLE ANSWER IS ZERO ; 6116 ; 6117 ;HERE TO NORMALIZE NEGATIVE D.P. RESULTS ; 6118 =0 U 1054, 3142,7222,0000,4174,4007,0700,0000,0000,0000 ; 6119 DNEG: Q_.NOT.Q, J/DNEG1 ;ONES COMP U 1055, 1064,2222,0000,4174,4007,0511,4000,0000,0000 ; 6120 Q_-Q, SKIP CRY2, J/DNEG2 U 3142, 1064,5551,1313,4374,0007,0700,0000,0000,2000 ; 6121 DNEG1: [FLG]_[FLG].AND.NOT.#, FLG.SN/1, HOLD RIGHT ; 6122 =0 ; 6123 DNEG2: [AR]_.NOT.[AR], ;NO CARRY U 1064, 1100,7441,0303,4174,4003,4701,0000,0000,0000 ; 6124 NORM DISP, J/DNNORM ;GO NORMALIZE ; 6125 [AR]_-[AR], ;CARRY U 1065, 1100,2441,0303,4174,4003,4701,4000,0000,0000 ; 6126 NORM DISP, J/DNNORM ;NORMALIZE ; 6127 ; 6128 =000* ; 6129 DNNORM: [AR]_[AR]*2 LONG, ;SHIFT 1 PLACE ; 6130 FE_FE-1, ASHC, ;ADJUST EXPONENT U 1100, 1100,3444,0303,4174,4043,4701,1000,0041,1777 ; 6131 NORM DISP, J/DNNORM ;LOOP TILL DONE ; 6132 =001* READ [AR], NORM DISP, ;SEE IF WE WENT TOO FAR U 1102, 1032,3333,0003,4174,4003,4701,0010,0000,0000 ; 6133 CALL [DROUND] ; AND ROUND ANSWER ; 6134 =010* [AR]_[AR]*.5 LONG, ASHC, U 1104, 1032,3446,0303,4174,4047,0700,1010,0041,0001 ; 6135 FE_FE+1, CALL [DROUND] ; 6136 =011* [AR]_[AR]*.5 LONG, ASHC, U 1106, 1032,3446,0303,4174,4047,0700,1010,0041,0001 ; 6137 FE_FE+1, CALL [DROUND] ; 6138 =100* Q_[MAG].AND.Q, ;HIGH WORD IS ZERO U 1110, 3145,4002,0000,4174,0007,0700,0000,0000,0000 ; 6139 HOLD RIGHT, J/DNNRM1 ;GO TEST LOW WORD U 1116, 1140,4111,1204,4174,4007,0700,0000,0000,0000 ; 6140 =111* [ARX]_[ARX].AND.[MASK] ;REMOVE ROUNDING BIT ; 6141 = ; 6142 =00 [ARX]_[ARX].AND.[MAG], ;ALSO CLEAR SIGN U 1140, 3146,4111,0004,4174,4007,0700,0010,0000,0000 ; 6143 CALL [CHKSN] ;ONES COMP? ; 6144 =10 [ARX]_[ARX].XOR.[MAG], ;YES--ONES COMP U 1142, 3143,6111,0004,4174,4007,0700,0000,0000,0000 ; 6145 J/DNN1 ;CONTINUE BELOW ; 6146 =11 [ARX]_-[ARX], 3T, ;NEGATE RESULT U 1143, 1074,2441,0404,4174,4007,0561,4000,0000,0000 ; 6147 SKIP CRY1, J/DNN2 ; 6148 = U 3143, 1074,5551,1313,4374,0007,0700,0000,0000,2000 ; 6149 DNN1: [FLG]_[FLG].AND.NOT.#, FLG.SN/1, HOLD RIGHT ;CLEAR FLAG ; 6150 =0 U 1074, 3144,7333,0003,0174,4007,0700,0400,0000,0000 ; 6151 DNN2: AC_.NOT.[AR], J/DNORM2 U 1075, 3144,2443,0300,0174,4007,0701,4400,0000,0000 ; 6152 AC_-[AR], 3T ; 6153 DNORM2: AC[1]_[ARX].AND.[MAG], ;STORE LOW WORD U 3144, 0060,4113,0400,1174,4156,4700,0400,0000,1441 ; 6154 NEXT INST ;ALL DONE ; 6155 U 3145, 1114,3223,0000,4174,4007,0621,0000,0000,0000 ; 6156 DNNRM1: READ Q, SKIP AD.EQ.0 ;TEST LOW WORD ; 6157 =0 [AR]_[AR]*2 LONG, ;LOW WORD IS NON-ZERO ; 6158 FE_FE-1, ASHC, ;ADJUST EXPONENT U 1114, 1100,3444,0303,4174,4043,4701,1000,0041,1777 ; 6159 NORM DISP, J/DNNORM ;KEEP LOOKING U 1115, 1515,3440,0303,1174,4007,0700,0400,0000,1441 ; 6160 AC[1]_[AR], J/STAC ;WHOLE ANSWER IS ZERO ; 6161 U 3146, 0002,4553,1300,4374,4004,1321,0000,0000,2000 ; 6162 CHKSN: TL [FLG], FLG.SN/1, RETURN [2] ; 6163 ; 6164 ;SUBROUTINE TO SET/CLEAR FLG.SN ; 6165 ;CALL WITH: ; 6166 ; CALL [SETSN], SKIP IF WE SHOULD CLEAR ; 6167 ;RETURNS 23 ; 6168 =0 U 1132, 0023,3551,1313,4374,0004,1700,0000,0000,2000 ; 6169 SETSN: [FLG]_[FLG].OR.#, FLG.SN/1, HOLD RIGHT, RETURN [23] U 1133, 0023,5551,1313,4374,0004,1700,0000,0000,2000 ; 6170 CLRSN: [FLG]_[FLG].AND.NOT.#, FLG.SN/1, HOLD RIGHT, RETURN [23] ; 6171 ; 6172 ; 6173 ;SUBROUTINE TO ROUND A FLOATING POINT NUMBER ; 6174 ;CALL WITH: ; 6175 ; NUMBER IN AR!Q AND NORM DISP ; 6176 ;RETURNS 16 WITH ROUNDED NUMBER IN AR!ARX ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 140 ; DSK: KSHACK; FLT 5 21:53:03 16-JAN-87 FLOATING POINT -- DOUBLE PRECISION NORMALIZE ; 6177 ; ; 6178 =*01* ; 6179 DROUND: [ARX]_(Q+1)*.5, ;ROUND AND SHIFT ; 6180 SKIP CRY2, ;SEE IF OVERFLOW U 1032, 1152,0007,0704,4174,4007,0511,0000,0000,0000 ; 6181 J/DRND1 ;COMPLETE ROUNDING ; 6182 [AR]_[AR]*.5 LONG, ;WE WENT TOO FAR U 1036, 1032,3446,0303,4174,4047,0700,1000,0041,0001 ; 6183 FE_FE+1, ASHC, J/DROUND ;SHIFT BACK AND ROUND ; 6184 =*010 U 1152, 0016,3770,0303,4324,0454,1700,0000,0041,0000 ; 6185 DRND1: [AR]_EXP, RETURN [16] ;NO OVERFLOW ; 6186 =011 [AR]_[AR]+.25, ;ADD CARRY (BITS 36 AND 37 ; 6187 ; ARE COPIES OF Q BITS) ; 6188 NORM DISP, ;SEE IF OVERFLOW U 1153, 1152,0441,0303,4174,4003,4701,4000,0000,0000 ; 6189 J/DRND1 ; .. ; 6190 =110 [AR]_[AR]*.5, ;SHIFT RIGHT ; 6191 FE_FE+1, ;KEEP EXP RIGHT U 1156, 1152,3447,0303,4174,4007,0700,1000,0041,0001 ; 6192 J/DRND1 ;ALL SET NOW ; 6193 = ; 6194 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 141 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 FLOATING POINT -- DOUBLE PRECISION NORMALIZE ; 6195 ;;;-*-Fundamental-*- ; 6196 ; 6197 .TOC "EXTEND -- DISPATCH ROM ENTRIES" ; 6198 ; 6199 .DCODE D 0001, 0001,1740,2100 ; 6200 001: I, SJCL, J/L-CMS D 0002, 0002,1740,2100 ; 6201 I, SJCE, J/L-CMS D 0003, 0003,1740,2100 ; 6202 I, SJCLE, J/L-CMS D 0004, 0002,1741,2100 ; 6203 I, B/2, J/L-EDIT D 0005, 0005,1740,2100 ; 6204 I, SJCGE, J/L-CMS D 0006, 0006,1740,2100 ; 6205 I, SJCN, J/L-CMS D 0007, 0007,1740,2100 ; 6206 I, SJCG, J/L-CMS ; 6207 D 0010, 0001,1742,2100 ; 6208 010: I, B/1, J/L-DBIN ;CVTDBO D 0011, 0004,1742,2100 ; 6209 I, B/4, J/L-DBIN ;CVTDBT D 0012, 0001,1743,2100 ; 6210 I, B/1, J/L-BDEC ;CVTBDO D 0013, 0000,1743,2100 ; 6211 I, B/0, J/L-BDEC ;CVTBDT ; 6212 D 0014, 0001,1744,2100 ; 6213 014: I, B/1, J/L-MVS ;MOVSO D 0015, 0000,1744,2100 ; 6214 I, B/0, J/L-MVS ;MOVST D 0016, 0002,1744,2100 ; 6215 I, B/2, J/L-MVS ;MOVSLJ D 0017, 0003,1744,2100 ; 6216 I, B/3, J/L-MVS ;MOVSRJ ; 6217 D 0020, 0000,1746,2100 ; 6218 020: I, J/L-XBLT D 0021, 0000,1747,2100 ; 6219 I, J/L-SPARE-A D 0022, 0000,1750,2100 ; 6220 I, J/L-SPARE-B D 0023, 0000,1751,2100 ; 6221 I, B/0, J/L-SPARE-C D 0024, 0001,1751,2100 ; 6222 I, B/1, J/L-SPARE-C D 0025, 0002,1751,2100 ; 6223 I, B/2, J/L-SPARE-C D 0026, 0004,1751,2100 ; 6224 I, B/4, J/L-SPARE-C D 0027, 0010,1751,2100 ; 6225 I, B/10, J/L-SPARE-C ; 6226 .UCODE ; 6227 ; 6228 1740: U 1740, 0400,4751,1203,4374,4007,0700,0000,0000,0040 ; 6229 L-CMS: LUUO ; 6230 1741: U 1741, 0400,4751,1203,4374,4007,0700,0000,0000,0040 ; 6231 L-EDIT: LUUO ; 6232 1742: U 1742, 0400,4751,1203,4374,4007,0700,0000,0000,0040 ; 6233 L-DBIN: LUUO ; 6234 1743: U 1743, 0400,4751,1203,4374,4007,0700,0000,0000,0040 ; 6235 L-BDEC: LUUO ; 6236 1744: U 1744, 0400,4751,1203,4374,4007,0700,0000,0000,0040 ; 6237 L-MVS: LUUO ; 6238 1746: U 1746, 0400,4751,1203,4374,4007,0700,0000,0000,0040 ; 6239 L-XBLT: LUUO ; 6240 1747: U 1747, 0400,4751,1203,4374,4007,0700,0000,0000,0040 ; 6241 L-SPARE-A: LUUO ; 6242 1750: U 1750, 0400,4751,1203,4374,4007,0700,0000,0000,0040 ; 6243 L-SPARE-B: LUUO ; 6244 1751: U 1751, 0400,4751,1203,4374,4007,0700,0000,0000,0040 ; 6245 L-SPARE-C: LUUO ; 6246 ; 6247 ;NOTE: WE DO NOT NEED TO RESERVE 3746 TO 3751 BECAUSE THE CODE ; 6248 ; AT EXTEND DOES A RANGE CHECK. ; 6249 ; 6250 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 142 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND -- INSTRUCTION SET DECODING ; 6251 .TOC "EXTEND -- INSTRUCTION SET DECODING" ; 6252 ; 6253 ;EACH INSTRUCTION IN THE RANGE 1-23 GOES TO 1 OF 2 PLACES ; 6254 ; 1740-1747 IF NOT UNDER EXTEND ; 6255 ; 3740-3747 IF UNDER EXTEND ; 6256 ; 6257 .DCODE D 0123, 0000,1467,3100 ; 6258 123: I,READ/1, J/EXTEND ; 6259 .UCODE ; 6260 ; 6261 1467: U 1467, 1021,3771,0005,4365,5007,0700,0200,0000,0002 ; 6262 EXTEND: MEM READ, [BR]_MEM ;FETCH INSTRUCTION ; 6263 =0** TL [BR], #/760740, ;IN RANGE 0-17 (AND AC#=0) U 1021, 3556,4553,0500,4374,4007,0321,0010,0076,0740 ; 6264 CALL [BITCHK] ;TRAP IF NON-ZERO BITS FOUND ; 6265 [BRX]_[HR].AND.# CLR RH, ;SPLIT OUT AC NUMBER U 1025, 3147,4521,0206,4374,4007,0700,0000,0000,0740 ; 6266 #/000740 ; FROM EXTEND INSTRUCTION ; 6267 [BR]_[BR].OR.[BRX], ;LOAD IR AND AC # U 3147, 3150,3111,0605,4174,0417,0700,0000,0000,0000 ; 6268 HOLD RIGHT, LOAD IR ; .. ; 6269 READ [BR], LOAD BYTE EA, ;LOAD XR # U 3150, 3151,3333,0005,4174,4217,0700,0000,0000,0500 ; 6270 J/EXTEA0 ;COMPUTE E1 ; 6271 U 3151, 3152,3333,0003,7174,4007,0700,0400,0000,0240 ; 6272 EXTEA0: WORK[E0]_[AR] U 3152, 1170,4443,0000,2174,4006,6700,0000,0000,0000 ; 6273 EXTEA1: EA MODE DISP ; 6274 =100* U 1170, 1172,0551,0505,2270,4007,0700,0000,0000,0000 ; 6275 EXTEA: [BR]_[BR]+XR ; 6276 EXTDSP: [BR]_EA FROM [BR], LOAD VMA, U 1172, 1216,5741,0505,4174,4003,7700,0200,0000,0010 ; 6277 B DISP, J/EXTEXT U 1174, 3153,0551,0505,2270,4007,0700,0200,0004,0512 ; 6278 [BR]_[BR]+XR, START READ, PXCT EXTEND EA, LOAD VMA, J/EXTIND U 1176, 3153,3443,0500,4174,4007,0700,0200,0004,0512 ; 6279 VMA_[BR], START READ, PXCT EXTEND EA ; 6280 U 3153, 3152,3771,0005,4361,5217,0700,0200,0000,0502 ; 6281 EXTIND: MEM READ, [BR]_MEM, HOLD LEFT, LOAD BYTE EA, J/EXTEA1 ; 6282 ; 6283 ;HERE TO EXTEND SIGN FOR OFFSET MODES ; 6284 =1110 ; 6285 EXTEXT: WORK[E1]_[BR], ;SAVE E1 U 1216, 3400,3333,0005,7174,4001,2700,0400,0000,0241 ; 6286 DISP/DROM, J/3400 ;GO TO EXTENDED EXECUTE CODE U 1217, 1134,3333,0005,4174,4007,0530,0000,0000,0000 ; 6287 READ [BR], SKIP DP18 ;NEED TO EXTEND SIGN ; 6288 =0 WORK[E1]_[BR], ;POSITIVE U 1134, 3400,3333,0005,7174,4001,2700,0400,0000,0241 ; 6289 DISP/DROM, J/3400 ; 6290 [BR]_#, #/777777, HOLD RIGHT, ;NEGATIVE U 1135, 1216,3771,0005,4374,0007,0700,0000,0077,7777 ; 6291 J/EXTEXT ; 6292 ; 6293 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 143 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND -- MOVE STRING -- SETUP ; 6294 .TOC "EXTEND -- MOVE STRING -- SETUP" ; 6295 ; 6296 ;HERE TO MOVE A STRING ; 6297 ;COME HERE WITH: ; 6298 ; AR/ E0 ; 6299 ; BR/ E1 ; 6300 ; ; 6301 3744: ; 6302 MVS: [AR]_[AR]+1, ;GO FETCH FILL ; 6303 LOAD VMA, ; BYTE ; 6304 START READ, ; .. U 3744, 3346,0111,0703,4174,4007,0700,0210,0004,0012 ; 6305 CALL [GTFILL] ;SUBROUTINE TO COMPLETE U 3754, 1101,3771,0005,1276,6007,0701,0000,0000,1443 ; 6306 3754: [BR]_AC[DLEN] ;GET DEST LENGTH AND FLAGS ; 6307 =0** TL [BR], #/777000, ;ANY FLAGS SET? U 1101, 3556,4553,0500,4374,4007,0321,0010,0077,7000 ; 6308 CALL [BITCHK] ;SEE IF ILLEGAL U 1105, 1144,3771,0003,0276,6007,0700,0000,0000,0000 ; 6309 [AR]_AC ;GET SRC LENGTH AND FLAGS ; 6310 =0 [BRX]_[AR].AND.# CLR RH, ;COPY FLAGS TO BRX ; 6311 #/777000, ; .. U 1144, 3350,4521,0306,4374,4007,0700,0010,0077,7000 ; 6312 CALL [CLRFLG] ;CLEAR FLAGS IN AR ; 6313 ;NEW DLEN IS - ; 6314 AC[DLEN]_[AR]-[BR], 3T, ;COMPUTE DIFFERENCE U 1145, 1146,2113,0305,1174,4007,0521,4400,0000,1443 ; 6315 SKIP DP0 ;WHICH IS SHORTER? ; 6316 =0 [AR]_.NOT.[BR], ;DESTINATION U 1146, 3154,7441,0503,4174,4007,0700,0000,0000,0000 ; 6317 J/MVS1 ;GET NEGATIVE LENGTH U 1147, 3154,7441,0303,4174,4007,0700,0000,0000,0000 ; 6318 [AR]_.NOT.[AR] ;SOURCE ; 6319 MVS1: WORK[SLEN]_[AR], ; .. U 3154, 1234,3333,0003,7174,4003,7700,0400,0000,0242 ; 6320 B DISP ;SEE WHAT TYPE OF MOVE ; 6321 ;SLEN NOW HAS --1 ; 6322 =1100 U 1234, 1160,3771,0013,4370,4007,0700,0000,0000,0003 ; 6323 STATE_[SRC], J/MOVELP ;TRANSLATE--ALL SET U 1235, 3155,3771,0005,1276,6007,0701,0000,0000,1444 ; 6324 [BR]_AC[DSTP], J/MVSO ;OFFSET BUILD MASK ; 6325 [ARX]_[AR], ;LEFT JUSTIFY U 1236, 3175,3441,0304,4174,4007,0700,0000,0000,0000 ; 6326 J/MOVST0 ; .. ; 6327 [ARX]_AC[DLEN], ;RIGHT JUSTIFY ; 6328 SKIP DP0, 4T, ;WHICH IS SHORTER? U 1237, 1200,3771,0004,1276,6007,0522,0000,0000,1443 ; 6329 J/MOVRJ ; 6330 U 3155, 3156,3333,0005,4174,4007,0700,1000,0041,6020 ; 6331 MVSO: READ [BR], FE_S+2 ;GET DST BYTE SIZE U 3156, 1155,4222,0000,4174,4006,7701,1000,0041,1770 ; 6332 Q_0, BYTE STEP ;BUILD AN S BIT MASK ; 6333 =0* U 1155, 1155,4224,0003,4174,4026,7701,1000,0041,1770 ; 6334 MVSO1: GEN MSK [AR], BYTE STEP, J/MVSO1 U 1157, 3157,7221,0003,4174,4007,0700,0000,0000,0000 ; 6335 [AR]_.NOT.Q ;BITS WHICH MUST NOT BE SET ; 6336 WORK[MSK]_[AR].AND.[MASK], ;SAVE FOR SRCMOD U 3157, 1167,4113,0312,7174,4007,0700,0400,0000,0243 ; 6337 J/MOVLP0 ;GO ENTER LOOP ; 6338 ; 6339 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 144 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND -- MOVE STRING -- OFFSET/TRANSLATE ; 6340 .TOC "EXTEND -- MOVE STRING -- OFFSET/TRANSLATE" ; 6341 ; 6342 ;HERE IS THE LOOP FOR OFFSET AND TRANSLATED MOVES ; 6343 =000 ; 6344 MOVELP: [AR]_WORK[SLEN]+1, ;UPDATE STRING LENGTH U 1160, 2104,0551,0703,7274,4007,0701,0010,0000,0242 ; 6345 CALL [SRCMOD] ;GET A SOURCE BYTE ; 6346 =001 [ARX]_[AR], SKIP DP0, ;(1) LENGTH EXHAUSTED U 1161, 1230,3441,0304,4174,4007,0520,0000,0000,0000 ; 6347 J/MOVST2 ; SEE IF FILL IS NEEDED ; 6348 =100 [AR]_-WORK[SLEN], ;(4) ABORT U 1164, 3160,1771,0003,7274,4007,0701,4000,0000,0242 ; 6349 J/MVABT ; .. ; 6350 STATE_[SRC+DST], ;(5) NORMAL--STORE DST BYTE U 1165, 3340,3771,0013,4370,4007,0700,0010,0000,0005 ; 6351 CALL [PUTDST] ; .. ; 6352 =111 U 1167, 1160,3771,0013,4370,4007,0700,0000,0000,0003 ; 6353 MOVLP0: STATE_[SRC], J/MOVELP ;(7) DPB DONE ; 6354 = ; 6355 ; 6356 ;HERE TO ABORT A STRING MOVE DUE TO TRANSLATE OR OFFSET FAILURE ; 6357 ; 6358 MVABT: [BR]_AC[DLEN], ;WHICH STRING IS LONGER U 3160, 1150,3771,0005,1276,6007,0522,0000,0000,1443 ; 6359 SKIP DP0, 4T ; 6360 =0 U 1150, 3161,3440,0303,1174,4007,0700,0400,0000,1443 ; 6361 MVABT1: AC[DLEN]_[AR], J/MVABT2 ;PUT AWAY DEST LEN ; 6362 [AR]_[AR]-[BR], ;DEST LEN WAS GREATER U 1151, 1150,1111,0503,4174,4007,0700,4000,0000,0000 ; 6363 J/MVABT1 ;STICK BACK IN AC ; 6364 U 3161, 3162,7771,0003,7274,4007,0701,0000,0000,0242 ; 6365 MVABT2: [AR]_.NOT.WORK[SLEN] ;GET UNDECREMENTED SLEN U 3162, 1162,3333,0005,4174,4007,0520,0000,0000,0000 ; 6366 READ [BR], SKIP DP0 ;NEED TO FIXUP SRC? U 1162, 1163,0111,0503,4174,4007,0700,0000,0000,0000 ; 6367 =0 [AR]_[AR]+[BR] ;SRC LONGER BY (DLEN) U 1163, 3163,3111,0603,4174,4007,0700,0000,0000,0000 ; 6368 MVEND: [AR]_[AR].OR.[BRX] ;PUT BACK SRC FLAGS U 3163, 1515,4221,0013,4170,4007,0700,0000,0000,0000 ; 6369 END STATE, J/STAC ;ALL DONE ; 6370 ; 6371 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 145 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND -- MOVE STRING -- MOVSRJ ; 6372 .TOC "EXTEND -- MOVE STRING -- MOVSRJ" ; 6373 ; 6374 =00 U 1200, 3164,3771,0003,1276,6007,0701,0000,0000,1441 ; 6375 MOVRJ: [AR]_AC[SRCP], J/MVSKP ;SRC LONGER, SKIP OVER SOME ; 6376 STATE_[DSTF], ;DST LONGER, FILL IT U 1201, 2103,3771,0013,4370,4007,0700,0010,0000,0006 ; 6377 CALL [MOVFIL] ; .. ; 6378 =11 [ARX]_WORK[SLEN]+1, ;DONE FILLING U 1203, 3176,0551,0704,7274,4007,0701,0000,0000,0242 ; 6379 J/MOVST1 ;GO MOVE STRING ; 6380 ; 6381 ;HERE TO SKIP OVER EXTRA SOURCE BYTES ; 6382 MVSKP: AC[SRCP]_[AR], ;PUT POINTER BACK U 3164, 1204,3440,0303,1174,4007,0670,0400,0000,1441 ; 6383 SKIP -1MS ;[121] Is there a timer interrupt? U 1204, 3167,3333,0003,7174,4007,0700,0400,0000,0211 ; 6384 =0 WORK[SV.AR]_[AR], J/MVSK2 ;[121][123] Yes, save regs for interrupt. ; 6385 [ARX]_[ARX]-1, 3T, ;DONE SKIPPING? U 1205, 1206,1111,0704,4174,4007,0521,4000,0000,0000 ; 6386 SKIP DP0 ; 6387 =0 IBP DP, IBP SCAD, ;NO--START THE IBP ; 6388 SCAD DISP, SKIP IRPT, ;4-WAY DISPATCH U 1206, 1210,3770,0305,4334,4016,7371,0000,0033,6000 ; 6389 3T, J/MVSKP1 ;GO BUMP POINTER ; 6390 AC[DLEN]_0, ;LENGTHS ARE NOW EQUAL U 1207, 1226,4223,0000,1174,4007,0700,0400,0000,1443 ; 6391 J/MOVST4 ;GO MOVE STRING ; 6392 ; 6393 =00 U 1210, 3164,3441,0503,4174,4007,0700,0000,0000,0000 ; 6394 MVSKP1: [AR]_[BR], J/MVSKP ;NO OVERFLOW ; 6395 [AR]_.NOT.WORK[SLEN], ;INTERRUPT [121] or timer U 1211, 3165,7771,0003,7274,4007,0701,0000,0000,0242 ; 6396 J/MVSK3 ; .. ; 6397 SET P TO 36-S, ;WORD OVERFLOW U 1212, 3166,3770,0503,4334,4017,0700,0000,0032,6000 ; 6398 J/MVSKP2 ;FIXUP Y U 1213, 3165,7771,0003,7274,4007,0701,0000,0000,0242 ; 6399 [AR]_.NOT.WORK[SLEN] ;INTERRUPT U 3165, 1214,3440,0303,1174,4007,0700,0400,0000,1443 ; 6400 MVSK3: AC[DLEN]_[AR] ;RESET DLEN ; 6401 =0 [AR]_[AR]+[ARX], U 1214, 3551,0111,0403,4174,4007,0700,0010,0000,0000 ; 6402 CALL [INCAR] ;ADD 1 TO AR ; 6403 AC_[AR].OR.[BRX], ;PUT BACK FLAGS U 1215, 3602,3113,0306,0174,4007,0700,0400,0000,0000 ; 6404 J/ITRAP ;DO INTERRUPT TRAP ; 6405 ; 6406 MVSKP2: [AR]_[AR]+1, HOLD LEFT, ;BUMP Y U 3166, 3164,0111,0703,4170,4007,0700,0000,0000,0000 ; 6407 J/MVSKP ;KEEP GOING ; 6408 ; 6409 ;BEGIN EDIT [123] U 3167, 3170,3333,0005,7174,4007,0700,0400,0000,0213 ; 6410 MVSK2: WORK[SV.BR]_[BR] ;SAVE ALL U 3170, 3171,3333,0004,7174,4007,0700,0400,0000,0212 ; 6411 WORK[SV.ARX]_[ARX] ;THE REGISTERS U 3171, 1171,3333,0006,7174,4007,0700,0400,0000,0214 ; 6412 WORK[SV.BRX]_[BRX] ;FOR THE TICK U 1171, 3442,4443,0000,4174,4007,0700,0010,0000,0000 ; 6413 =0* CALL [TICK] ;UPDATE CLOCK AND SET INTERUPT U 1173, 3172,3771,0003,7274,4007,0701,0000,0000,0211 ; 6414 [AR]_WORK[SV.AR] ;NOW PUT U 3172, 3173,3771,0005,7274,4007,0701,0000,0000,0213 ; 6415 [BR]_WORK[SV.BR] ;THEM ALL U 3173, 3174,3771,0004,7274,4007,0701,0000,0000,0212 ; 6416 [ARX]_WORK[SV.ARX] ;BACK SO WE ; 6417 [BRX]_WORK[SV.BRX], ;CAN CONTINUE U 3174, 3164,3771,0006,7274,4007,0701,0000,0000,0214 ; 6418 J/MVSKP ; 6419 ;END EDIT [123] ; 6420 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 146 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND -- MOVE STRING -- SIMPLE MOVE LOOP ; 6421 .TOC "EXTEND -- MOVE STRING -- SIMPLE MOVE LOOP" ; 6422 ; 6423 ;HERE FOR NO-MODIFICATION STRING MOVES U 3175, 3176,0111,0704,4174,4007,0700,0000,0000,0000 ; 6424 MOVST0: [ARX]_[ARX]+1 ;CANT DO [ARX]_[AR]+1 U 3176, 1220,3771,0013,4370,4007,0700,0000,0000,0003 ; 6425 MOVST1: STATE_[SRC] ;PREPARE FOR PAGE FAIL ; 6426 =000 ; 6427 WORK[SLEN]_[ARX], ;GO GET A SOURCE BYTE U 1220, 2142,3333,0004,7174,4007,0520,0410,0000,0242 ; 6428 SKIP DP0, CALL [GSRC] ; .. ; 6429 MOVSTX: [ARX]_[AR], ;SHORT STRING RAN OUT U 1221, 1230,3441,0304,4174,4007,0520,0000,0000,0000 ; 6430 SKIP DP0, J/MOVST2 ;GO SEE IF FILL NEEDED ; 6431 =010 STATE_[SRC+DST], ;WILL NEED TO BACK UP BOTH POINTERS U 1222, 3340,3771,0013,4370,4007,0700,0010,0000,0005 ; 6432 CALL [PUTDST] ;STORE BYTE ; 6433 =110 ; 6434 MOVST4: [ARX]_WORK[SLEN]+1, ;COUNT DOWN LENGTH U 1226, 3176,0551,0704,7274,4007,0701,0000,0000,0242 ; 6435 J/MOVST1 ;LOOP OVER STRING ; 6436 = ; 6437 =00 U 1230, 3177,4223,0000,1174,4007,0700,0400,0000,1443 ; 6438 MOVST2: AC[DLEN]_0, J/MOVST3 ;CLEAR DEST LEN, REBUILD SRC U 1231, 2103,3771,0013,4370,4007,0700,0010,0000,0004 ; 6439 STATE_[DST], CALL [MOVFIL] ;FILL OUT DEST U 1233, 1313,3440,0606,0174,4007,0700,0400,0000,0000 ; 6440 =11 AC_[BRX], J/ENDSKP ;ALL DONE ; 6441 U 3177, 3200,3113,0406,0174,4007,0700,0400,0000,0000 ; 6442 MOVST3: AC_[ARX].OR.[BRX] ;REBUILD SRC U 3200, 0172,4221,0013,4170,4007,0700,0000,0000,0000 ; 6443 END STATE, J/SKIPE ; .. ; 6444 ; 6445 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 147 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND -- COMPARE STRING ; 6446 .TOC "EXTEND -- COMPARE STRING" ; 6447 ; 6448 3740: U 3740, 1103,3771,0004,1276,6007,0701,0000,0000,1443 ; 6449 CMS: [ARX]_AC[DLEN] ;GET DEST LEN U 1103, 3556,4553,0400,4374,4007,0321,0010,0077,7000 ; 6450 =0** TL [ARX], #/777000, CALL [BITCHK] U 1107, 1223,3771,0006,0276,6007,0700,0000,0000,0000 ; 6451 [BRX]_AC ;GET SRC LEN U 1223, 3556,4553,0600,4374,4007,0321,0010,0077,7000 ; 6452 =0** TL [BRX], #/777000, CALL [BITCHK] U 1227, 1224,2113,0604,4174,4007,0521,4000,0000,0000 ; 6453 [BRX]-[ARX], 3T, SKIP DP0 ;WHICH STRING IS LONGER? U 1224, 1225,0111,0703,4174,4007,0700,0000,0000,0000 ; 6454 =0 [AR]_[AR]+1 ;SRC STRING IS LONGER U 1225, 1240,0111,0703,4170,4007,0700,0200,0004,0012 ; 6455 VMA_[AR]+1, START READ ;DST STRING ; 6456 =0 [AR]_0, ;FORCE FIRST COMPARE TO BE ; 6457 ;EQUAL U 1240, 3546,4221,0003,4174,4007,0700,0010,0000,0000 ; 6458 CALL [LOADQ] ;PUT FILL INTO Q ; 6459 WORK[FILL]_Q, ;SAVE FILLER U 1241, 3210,3223,0000,7174,4007,0700,0400,0000,0244 ; 6460 J/CMS2 ;ENTER LOOP ; 6461 ; 6462 ;HERE IS THE COMPARE LOOP. ; 6463 ; ARX/ CONATINS REMAINING DEST LENGTH ; 6464 ; BRX/ CONTAINS REMAINING SOURCE LENGTH ; 6465 =0 ; 6466 CMS3: ;BYTES ARE NOT EQUAL ; 6467 END STATE, ;NO MORE SPECIAL PAGE FAIL ACTION U 1242, 0170,4221,0013,4170,4003,7700,0000,0000,0000 ; 6468 SKIP-COMP DISP ;SEE SKIP-COMP-TABLE U 1243, 3201,3771,0003,1276,6007,0701,0000,0000,1441 ; 6469 CMS4: [AR]_AC[SRCP] ;GET BYTE POINTER U 3201, 1244,3333,0006,4174,4007,0520,0000,0000,0000 ; 6470 READ [BRX], SKIP DP0 ;MORE IN SOURCE STRING? ; 6471 =00 STATE_[EDIT-SRC], ;PREPARE FOR PAGE FAIL U 1244, 2143,3771,0013,4370,4007,0700,0010,0000,0011 ; 6472 CALL [GETSRC] ; GO GET BYTE ; 6473 READ [ARX], SKIP DP0, ;NO MORE SRC--SEE IF MORE DEST U 1245, 1254,3333,0004,4174,4007,0520,0000,0000,0000 ; 6474 J/CMS5 ; .. U 1246, 3202,3333,0003,7174,4007,0700,0400,0000,0245 ; 6475 WORK[CMS]_[AR] ;SAVE SRC BYTE ; 6476 = U 3202, 3203,3440,0606,0174,4007,0700,0400,0000,0000 ; 6477 AC_[BRX] ;PUT BACK SRC LEN U 3203, 3204,3771,0013,4370,4007,0700,0000,0000,0010 ; 6478 STATE_[COMP-DST] ;HAVE TO BACK UP IF DST FAILS U 3204, 1250,3333,0004,4174,4007,0520,0000,0000,0000 ; 6479 READ [ARX], SKIP DP0 ;ANY MORE DEST? ; 6480 =00 U 1250, 1256,4443,0000,4174,4007,0700,0010,0000,0000 ; 6481 CMS6: CALL [CMPDST] ;MORE DEST BYTES ; 6482 [AR]_WORK[FILL], ;OUT OF DEST BYTES U 1251, 3205,3771,0003,7274,4007,0701,0000,0000,0244 ; 6483 J/CMS7 ;GO DO COMPARE U 1252, 3205,3440,0404,1174,4007,0700,0400,0000,1443 ; 6484 AC[DLEN]_[ARX] ;GOT A BYTE, UPDATE LENGTH ; 6485 = ; 6486 CMS7: [AR]_[AR].AND.[MASK], ;MAKE MAGNITUDES U 3205, 3206,4111,1203,7174,4007,0700,0000,0000,0245 ; 6487 WORK[CMS] ;WARM UP RAM U 3206, 3207,4551,1205,7274,4007,0700,0000,0000,0245 ; 6488 [BR]_[MASK].AND.WORK[CMS], 2T ;GET SRC MAGNITUDE U 3207, 3210,2111,0503,4174,4007,0700,4000,0000,0000 ; 6489 [AR]_[BR]-[AR] REV ;UNSIGNED COMPARE U 3210, 3211,1111,0704,4174,4007,0700,4000,0000,0000 ; 6490 CMS2: [ARX]_[ARX]-1 ;UPDATE LENGTHS U 3211, 3212,1111,0706,4174,4007,0700,4000,0000,0000 ; 6491 [BRX]_[BRX]-1 ; .. U 3212, 1242,3333,0003,4174,4007,0621,0000,0000,0000 ; 6492 READ [AR], SKIP AD.EQ.0, J/CMS3 ;SEE IF EQUAL ; 6493 ; 6494 =0 U 1254, 3213,3772,0000,7274,4007,0701,0000,0000,0244 ; 6495 CMS5: Q_WORK[FILL], J/CMS8 ;MORE DST--GET SRC FILL U 1255, 1242,4221,0003,4174,4007,0700,0000,0000,0000 ; 6496 [AR]_0, J/CMS3 ;STRINGS ARE EQUAL U 3213, 3214,3771,0013,4370,4007,0700,0000,0000,0012 ; 6497 CMS8: STATE_[EDIT-DST] ;JUST DST POINTER ON PAGE FAIL U 3214, 1250,3223,0000,7174,4007,0700,0400,0000,0245 ; 6498 WORK[CMS]_Q, J/CMS6 ;MORE DST--SAVE SRC FILL ; 6499 ; 6500 =0 ; 6501 CMPDST: [AR]_AC[DSTP], ;GET DEST POINTER U 1256, 3341,3771,0003,1276,6007,0701,0010,0000,1444 ; 6502 CALL [IDST] ;UPDATE IT ; 6503 READ [AR], ;LOOK AT BYTE POINTER ; 6504 FE_FE.AND.S#, S#/0770, ;MASK OUT BIT 6 U 1257, 0550,3333,0003,4174,4006,5701,1000,0051,0770 ; 6505 BYTE DISP, J/LDB1 ;GO LOAD BYTE ; 6506 ; 6507 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 148 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND -- DECIMAL TO BINARY CONVERSION ; 6508 .TOC "EXTEND -- DECIMAL TO BINARY CONVERSION" ; 6509 ; 6510 3742: U 3742, 3215,4571,1203,4374,4007,0700,0000,0077,7777 ; 6511 DBIN: [AR]_[777777] XWD 0 ;IF WE ARE IN OFFSET MODE U 3215, 3216,3333,0003,7174,4007,0700,0400,0000,0243 ; 6512 WORK[MSK]_[AR] ; ONLY ALLOW 18 BITS ; 6513 ;RANGE CHECKED (0-10) LATER U 3216, 3217,3771,0003,0276,6007,0700,0000,0000,0000 ; 6514 [AR]_AC ;GET SRC LENGTH ; 6515 [BRX]_[AR].AND.# CLR RH, ;SPLIT OUT FLAGS U 3217, 1175,4521,0306,4374,4007,0700,0000,0077,7000 ; 6516 #/777000 ; .. ; 6517 =0* [ARX]_AC[BIN1], ;GET LOW WORD U 1175, 1572,3771,0004,1276,6007,0701,0010,0000,1444 ; 6518 CALL [CLARX0] ;CLEAR BIT 0 OF ARX U 1177, 1260,3440,0404,1174,4007,0700,0400,0000,1444 ; 6519 AC[BIN1]_[ARX] ;STORE BACK ; 6520 =0 READ [BRX], SKIP DP0, ;IS S ALREADY SET? U 1260, 1326,3333,0006,4174,4007,0520,0010,0000,0000 ; 6521 CALL [CLRBIN] ;GO CLEAR BIN IF NOT ; 6522 [AR]_[AR].AND.#, ;CLEAR FLAGS FROM LENGTH ; 6523 #/000777, HOLD RIGHT, ; .. U 1261, 1276,4551,0303,4374,0003,7700,0000,0000,0777 ; 6524 B DISP ;SEE IF OFFSET OR TRANSLATE ; 6525 =1110 U 1276, 3220,3771,0013,4370,4007,0700,0000,0000,0007 ; 6526 DBIN1: STATE_[CVTDB], J/DBIN2 ;TRANSLATE--LEAVE S ALONE ; 6527 [BRX]_[BRX].OR.#, ;OFFSET--FORCE S TO 1 ; 6528 #/400000, HOLD RIGHT, U 1277, 1276,3551,0606,4374,0007,0700,0000,0040,0000 ; 6529 J/DBIN1 U 3220, 1262,7333,0003,7174,4007,0700,0400,0000,0242 ; 6530 DBIN2: WORK[SLEN]_.NOT.[AR] ;STORE -SLEN-1 ; 6531 ; 6532 ;HERE IS THE MAIN LOOP ; 6533 =0*0 U 1262, 2104,0551,0703,7274,4007,0701,0010,0000,0242 ; 6534 DBINLP: [AR]_WORK[SLEN]+1, CALL [SRCMOD] ;(0) GET MODIFIED SRC BYTE ; 6535 TL [BRX], #/100000, ;(1) DONE, IS M SET? U 1263, 1304,4553,0600,4374,4007,0321,0000,0010,0000 ; 6536 J/DBXIT ; 6537 [AR]_.NOT.WORK[SLEN], ;(4) ABORT U 1266, 3225,7771,0003,7274,4007,0701,0000,0000,0242 ; 6538 J/DBABT ; .. ; 6539 [AR]-#, #/10., ;(5) NORMAL--SEE IF 0-9 U 1267, 1264,1553,0300,4374,4007,0532,4000,0000,0012 ; 6540 4T, SKIP DP18 ; .. ; 6541 =0 [AR]_.NOT.WORK[SLEN], ;DIGIT TOO BIG U 1264, 3225,7771,0003,7274,4007,0701,0000,0000,0242 ; 6542 J/DBABT ;GO ABORT CVT ; 6543 ; 6544 ;HERE TO ADD IN A DIGIT ; 6545 [BR]_AC[BIN0], 4T, ;GET HIGH BINARY U 1265, 1270,3771,0005,1276,6007,0622,0000,0000,1443 ; 6546 SKIP AD.EQ.0 ;SEE IF SMALL ; 6547 =00 ; 6548 DBSLO: [ARX]_AC[BIN1], ;TOO BIG U 1270, 1310,3771,0004,1276,6007,0701,0010,0000,1444 ; 6549 CALL [DBSLOW] ;GO USE DOUBLE PRECISION PATHS ; 6550 [BR]_AC[BIN1], ;GET LOW WORD U 1271, 3221,3771,0005,1276,6007,0701,0000,0000,1444 ; 6551 J/DBFAST ;MIGHT FIT IN 1 WORD U 1272, 1262,4443,0000,4174,4007,0700,0000,0000,0000 ; 6552 J/DBINLP ;RETURN FROM DBSLOW ; 6553 ;GO DO NEXT DIGIT ; 6554 = U 3221, 1274,4553,0500,4374,4007,0321,0000,0076,0000 ; 6555 DBFAST: TL [BR], #/760000 ;WILL RESULT FIT IN 36 BITS? U 1274, 1270,4443,0000,4174,4007,0700,0000,0000,0000 ; 6556 =0 J/DBSLO ;MAY NOT FIT--USE DOUBLE WORD U 1275, 3222,3775,0005,1276,6007,0701,0000,0000,1444 ; 6557 [BR]_AC[BIN1]*2 ;COMPUTE AC*2 U 3222, 1300,3445,0505,1174,4007,0700,0000,0000,1444 ; 6558 [BR]_[BR]*2, AC[BIN1] ;COMPUTE AC*4 ; 6559 =0 [BR]_[BR]+AC[BIN1], 2T, ;COMPUTE AC*5 U 1300, 3552,0551,0505,1274,4007,0700,0010,0000,1444 ; 6560 CALL [SBRL] ;COMPUTE AC*10 ; 6561 AC[BIN1]_[AR]+[BR], 3T, ;NEW BINARY RESULT U 1301, 1262,0113,0305,1174,4007,0701,0400,0000,1444 ; 6562 J/DBINLP ;DO NEXT DIGIT ; 6563 ; 6564 ;HERE IF NUMBER DOES NOT FIT IN ONE WORD ; 6565 ; 6566 =000 ; 6567 DBSLOW: [BR]_AC[BIN0], ;FETCH HIGH WORD U 1310, 1330,3771,0005,1276,6007,0701,0010,0000,1443 ; 6568 CALL [MULBY4] ;MULTIPLY BY 4 ; 6569 [ARX]_[ARX]+AC[BIN1], ;COMPUTE VALUE * 5 ; 6570 SKIP CRY1, 4T, ;SEE IF OVERFLOW U 1311, 1302,0551,0404,1274,4007,0562,0010,0000,1444 ; 6571 CALL [ADDCRY] ;GO ADD CARRY U 1315, 1320,0551,0505,1274,4007,0701,0000,0000,1443 ; 6572 =101 [BR]_[BR]+AC[BIN0] ;ADD IN HIGH WORD ; 6573 = U 1320, 1331,4443,0000,4174,4007,0700,0010,0000,0000 ; 6574 =000 CALL [DBLDBL] ;MAKE * 10 ; 6575 [ARX]_[ARX]+[AR], 3T, ;ADD IN NEW DIGIT ; 6576 SKIP CRY1, ;SEE IF OVERFLOW U 1321, 1302,0111,0304,4174,4007,0561,0010,0000,0000 ; 6577 CALL [ADDCRY] ;ADD IN THE CARRY U 1325, 3223,3440,0404,1174,4007,0700,0400,0000,1444 ; 6578 =101 AC[BIN1]_[ARX] ;PUT BACK ANSWER ; 6579 = ; 6580 AC[BIN0]_[BR], ; .. U 3223, 0002,3440,0505,1174,4004,1700,0400,0000,1443 ; 6581 RETURN [2] ;GO DO NEXT BYTE ; 6582 ; 6583 ;HERE TO DOUBLE BR!ARX ; 6584 =000 U 1330, 1331,4443,0000,4174,4007,0700,0010,0000,0000 ; 6585 MULBY4: CALL [DBLDBL] ;DOUBLE TWICE U 1331, 1332,0111,0505,4174,4007,0700,0000,0000,0000 ; 6586 DBLDBL: [BR]_[BR]+[BR] ;DOUBLE HIGH WORD FIRST ; 6587 ;(SO WE DON'T DOUBLE CARRY) ; 6588 [ARX]_[ARX]+[ARX], ;DOUBLE LOW WORD ; 6589 SKIP CRY1, 3T, ;SEE IF CARRY U 1332, 1302,0111,0404,4174,4007,0561,0010,0000,0000 ; 6590 CALL [ADDCRY] ;ADD IN CARRY U 1336, 0001,4443,0000,4174,4004,1700,0000,0000,0000 ; 6591 =110 RETURN [1] ;ALL DONE ; 6592 = ; 6593 ; 6594 ;HERE TO ADD THE CARRY ; 6595 =0 U 1302, 0004,4443,0000,4174,4004,1700,0000,0000,0000 ; 6596 ADDCRY: RETURN [4] ;NO CARRY U 1303, 3224,4551,0404,4374,0007,0700,0000,0037,7777 ; 6597 CLEAR [ARX]0 ;KEEP LOW WORD POSITIVE ; 6598 [BR]_[BR]+1, ;ADD CARRY U 3224, 0004,0111,0705,4174,4004,1700,0000,0000,0000 ; 6599 RETURN [4] ;ALL DONE ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 149 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND -- DECIMAL TO BINARY CONVERSION ; 6600 ; 6601 ;HERE TO ABORT CONVERSION U 3225, 3226,3111,0306,4174,4007,0700,0000,0000,0000 ; 6602 DBABT: [BRX]_[BRX].OR.[AR] ;PUT BACK UNUSED LENGTH ; 6603 [PC]_[PC]-1, HOLD LEFT, ;DO NOT SKIP U 3226, 1305,1111,0701,4170,4007,0700,4000,0000,0000 ; 6604 J/DBDONE ;GO FIX UP SIGN COPY ; 6605 ; 6606 ;HERE AT END ; 6607 =0 ; 6608 DBXIT: [ARX]_AC[BIN1], ;GET LOW WORD U 1304, 3231,3771,0004,1276,6007,0701,0000,0000,1444 ; 6609 J/DBNEG ;GO NEGATE U 1305, 3227,3771,0003,1276,6007,0701,0000,0000,1444 ; 6610 DBDONE: [AR]_AC[BIN1] ;FETCH LOW WORD ; 6611 [BR]_AC[BIN0], 4T, ;GET HIGH WORD U 3227, 1306,3771,0005,1276,6007,0522,0000,0000,1443 ; 6612 SKIP DP0 ;WHAT SIGN U 1306, 3230,4551,0303,4374,0007,0700,0000,0037,7777 ; 6613 =0 CLEAR [AR]0, J/DBDN1 ;POSITIVE U 1307, 3230,3551,0303,4374,0007,0700,0000,0040,0000 ; 6614 [AR]_[AR].OR.#, #/400000, HOLD RIGHT U 3230, 1312,3440,0303,1174,4007,0700,0400,0000,1444 ; 6615 DBDN1: AC[BIN1]_[AR] ;STORE AC BACK ; 6616 =0 AC_[BRX] TEST, ;RETURN FLAGS U 1312, 1326,3770,0606,0174,4007,0520,0410,0000,0000 ; 6617 SKIP DP0, CALL [CLRBIN] ;CLEAR BIN IS S=0 U 1313, 0014,4221,0013,4170,4007,0700,0000,0000,0000 ; 6618 ENDSKP: END STATE, J/SKIP ;NO--ALL DONE ; 6619 U 3231, 3232,4551,0404,4374,0007,0700,0000,0037,7777 ; 6620 DBNEG: CLEAR ARX0 ;CLEAR EXTRA SIGN BIT ; 6621 [ARX]_-[ARX], 3T, ;NEGATE AND SEE IF U 3232, 1316,2441,0404,1174,4007,0621,4000,0000,1443 ; 6622 SKIP AD.EQ.0, AC[BIN0] ; ANY CARRY U 1316, 1323,7771,0003,1274,4007,0700,0000,0000,1443 ; 6623 =0 [AR]_.NOT.AC[BIN0], 2T, J/STAC34 ;NO CARRY ; 6624 [AR]_-AC[BIN0], 3T, ;CARRY U 1317, 1322,1771,0003,1274,4007,0621,4000,0000,1443 ; 6625 SKIP AD.EQ.0 ;SEE IF ALL ZERO U 1322, 1323,4571,1204,4374,4007,0700,0000,0040,0000 ; 6626 =0 [ARX]_[400000] XWD 0 ;MAKE COPY OF SIGN ; 6627 ; UNLESS HIGH WORD IS ZERO U 1323, 3233,3440,0303,1174,4007,0700,0400,0000,1443 ; 6628 STAC34: AC[BIN0]_[AR] ;PUT BACK ANSWER U 3233, 1305,3440,0404,1174,4007,0700,0400,0000,1444 ; 6629 AC[BIN1]_[ARX], J/DBDONE ; .. ; 6630 ; 6631 ;HELPER SUBROUTINE TO CLEAR AC[BIN0] AND AC[BIN1] IF S=0 ; 6632 ;CALL WITH: ; 6633 ; READ [BRX], SKIP DP0, CALL [CLRBIN] ; 6634 ;RETURNS 1 ALWAYS ; 6635 =0 U 1326, 3234,4223,0000,1174,4007,0700,0400,0000,1443 ; 6636 CLRBIN: AC[BIN0]_0, J/CLRB1 U 1327, 0001,4443,0000,4174,4004,1700,0000,0000,0000 ; 6637 RETURN [1] U 3234, 0001,4223,0000,1174,4004,1700,0400,0000,1444 ; 6638 CLRB1: AC[BIN1]_0, RETURN [1] ; 6639 ; 6640 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 150 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND -- BINARY TO DECIMAL CONVERSION ; 6641 .TOC "EXTEND -- BINARY TO DECIMAL CONVERSION" ; 6642 ; 6643 3743: ; 6644 BDEC: [BRX]_AC[DLEN], ;GET LENGTH AND FLAGS U 3743, 1334,3771,0006,1276,6007,0351,0000,0000,1443 ; 6645 SKIP FPD ;CONTINUE FROM INTERUPT? ; 6646 =0 [BRX]_[BRX].AND.#, ;JUST KEEP THE FLAGS ; 6647 #/777000, ; .. U 1334, 3235,4551,0606,4374,4007,0700,0000,0077,7000 ; 6648 J/BDEC0 ;COMPUTE NEW FLAGS U 1335, 3253,3771,0003,0276,6007,0700,0000,0000,0000 ; 6649 DOCVT: [AR]_AC, J/DOCVT1 ;ALL SET PRIOR TO TRAP U 3235, 3236,3771,0004,1276,6007,0701,0000,0000,1441 ; 6650 BDEC0: [ARX]_AC[1] ;GET LOW BINARY U 3236, 1340,3771,0003,0276,6007,0700,2000,0071,0024 ; 6651 [AR]_AC, SC_20. ;GET HIGH WORD, SET STEP COUNT ; 6652 =0* WORK[BDL]_[ARX], ;SAVE IN CASE OF ABORT U 1340, 1572,3333,0004,7174,4007,0700,0410,0000,0250 ; 6653 CALL [CLARX0] ;MAKE SURE BIT 0 IS OFF ; 6654 WORK[BDH]_[AR], ;SAVE HIGH WORD AND U 1342, 1344,3333,0003,7174,4007,0520,0400,0000,0247 ; 6655 SKIP DP0 ; TEST SIGN ; 6656 =0 ; 6657 BDEC1: [BRX]_0, HOLD LEFT, ;POSITIVE, CLEAR RH OF BRX U 1344, 1350,4221,0006,4170,4007,0700,0000,0000,0000 ; 6658 J/BDEC3 ;COMPUTE # OF DIGITS REQUIRED ; 6659 [BRX]_[BRX].OR.#, ;NEGATIVE, SET M U 1345, 1341,3551,0606,4374,0007,0700,0000,0010,0000 ; 6660 #/100000, HOLD RIGHT ; .. ; 6661 =0* U 1341, 2737,4551,0404,4374,0007,0700,0010,0037,7777 ; 6662 BDEC2: CLEAR ARX0, CALL [DBLNG1] ;NEGATE AR!ARX ; 6663 AC_[AR] TEST, ;PUT BACK ANSWER U 1343, 1346,3770,0303,0174,4007,0520,0400,0000,0000 ; 6664 SKIP DP0 ;IF STILL MINUS WE HAVE ; 6665 ; 1B0, AND NO OTHER BITS U 1346, 1344,3440,0404,1174,4007,0700,0400,0000,1441 ; 6666 =0 AC[1]_[ARX], J/BDEC1 ;POSITIVE NOW U 1347, 3237,0111,0704,4174,4007,0700,0000,0000,0000 ; 6667 [ARX]_[ARX]+1 ;JUST 1B0--ADD 1 ; 6668 [BRX]_[BRX].OR.#, ;AND REMEMBER THAT WE DID ; 6669 #/040000, HOLD RIGHT, ; IN LEFT HALF OF AC+3 U 3237, 1341,3551,0606,4374,0007,0700,0000,0004,0000 ; 6670 J/BDEC2 ; NEGATE IT AGAIN ; 6671 =0 U 1350, 1361,3771,0003,0276,6007,0700,0000,0000,0000 ; 6672 BDEC3: [AR]_AC, J/BDEC4 ;GET HIGH AC ; 6673 [BRX]_[BRX].OR.#, ;NO LARGER POWER OF 10 FITS ; 6674 #/200000, ;SET N FLAG (CLEARLY NOT 0) U 1351, 1354,3551,0606,4374,0007,0700,0000,0020,0000 ; 6675 HOLD RIGHT, J/BDEC5 ;SETUP TO FILL, ETC. ; 6676 =001 ; 6677 BDEC4: [ARX]_AC[1], ;GET HIGH WORD U 1361, 1512,3771,0004,1276,6007,0701,0010,0000,1441 ; 6678 CALL [BDSUB] ;SEE IF 10**C(BRX) FITS ; 6679 =011 [BRX]_[BRX]+1, ;NUMBER FITS--TRY A LARGER ONE U 1363, 1350,0111,0706,4174,4007,0630,2000,0060,0000 ; 6680 STEP SC, J/BDEC3 ;UNLESS WE ARE OUT OF NUMBERS U 1367, 1352,4553,0600,4374,4007,0331,0000,0077,7777 ; 6681 =111 TR [BRX], #/777777 ;ANY DIGITS REQUIRED? ; 6682 = ; 6683 =0 [BRX]_[BRX].OR.#, ;SOME DIGITS NEEDED, ; 6684 #/200000, HOLD RIGHT, ; SET N FLAG U 1352, 1354,3551,0606,4374,0007,0700,0000,0020,0000 ; 6685 J/BDEC5 ;CONTINUE BELOW U 1353, 1354,0111,0706,4174,4007,0700,0000,0000,0000 ; 6686 [BRX]_[BRX]+1 ;ZERO--FORCE AT LEAST 1 DIGIT ; 6687 ; 6688 =0 ; 6689 BDEC5: [AR]_AC[DLEN], ;GET LENGTH U 1354, 3350,3771,0003,1276,6007,0701,0010,0000,1443 ; 6690 CALL [CLRFLG] ;REMOVE FLAGS FROM AR U 1355, 3240,4221,0005,4174,4007,0700,0000,0000,0000 ; 6691 [BR]_0 U 3240, 3241,3441,0605,4170,4007,0700,0000,0000,0000 ; 6692 [BR]_[BRX], HOLD LEFT ;GET # OF DIGITS NEEDED ; 6693 [BR]_[BR]-[AR], ;NUMBER OF FILLS NEEDED U 3241, 1356,1111,0305,4174,4007,0421,4000,0000,0000 ; 6694 SKIP AD.LE.0 ;SEE IF ENOUGH ROOM ; 6695 =0 [ARX]_WORK[BDL], ;DOES NOT FIT IN SPACE ALLOWED U 1356, 3263,3771,0004,7274,4007,0701,0000,0000,0250 ; 6696 J/BDABT ; DO NOT DO CONVERT U 1357, 1364,3333,0006,4174,4007,0520,0000,0000,0000 ; 6697 READ [BRX], SKIP DP0 ;IS L ALREADY SET ; 6698 =0 AC[DLEN]_[BRX], ;NO--NO FILLERS U 1364, 1335,3440,0606,1174,4007,0700,0400,0000,1443 ; 6699 J/DOCVT ;GO CHURN OUT THE NUMBER ; 6700 ; 6701 ; 6702 ;HERE TO STORE LEADING FILLERS U 1365, 3242,3441,0603,4174,0007,0700,0000,0000,0000 ; 6703 [AR]_[BRX], HOLD RIGHT ;MAKE SURE THE FLAGS GET SET U 3242, 3243,3440,0303,1174,4007,0700,0400,0000,1443 ; 6704 AC[DLEN]_[AR] ; BEFORE WE PAGE FAIL U 3243, 3244,3771,0003,7274,4007,0701,0000,0000,0240 ; 6705 [AR]_WORK[E0] ;ADDRESS OF FILL (-1) ; 6706 [AR]_[AR]+1, LOAD VMA, ;FETCH FILLER U 3244, 3245,0111,0703,4174,4007,0700,0200,0004,0012 ; 6707 START READ U 3245, 3246,3771,0016,4365,5007,0700,0200,0000,0002 ; 6708 MEM READ, [T0]_MEM ;GET FILLER INTO AR U 3246, 3247,3771,0013,4370,4007,0700,0000,0000,0012 ; 6709 STATE_[EDIT-DST] ;PAGE FAILS BACKUP DST U 3247, 3250,2113,0507,7174,4007,0701,4400,0000,0242 ; 6710 WORK[SLEN]_[BR]-1, 3T ;SAVE # OF FILLERS U 3250, 3251,3441,1603,7174,4007,0700,0000,0000,0242 ; 6711 BDFILL: [AR]_[T0], WORK[SLEN] ;RESTORE FILL BYTE AND ; 6712 ; WARM UP RAM FILE ; 6713 [BR]_WORK[SLEN]+1, 3T, ;MORE FILLERS NEEDED? U 3251, 1370,0551,0705,7274,4007,0521,0000,0000,0242 ; 6714 SKIP DP0 U 1370, 1335,3440,0606,1174,4007,0700,0400,0000,1443 ; 6715 =000 AC[DLEN]_[BRX], J/DOCVT ;ALL DONE FIX FLAGS AND CONVERT ; 6716 =001 WORK[SLEN]_[BR], ;SAVE UPDATED LENGTH U 1371, 3340,3333,0005,7174,4007,0700,0410,0000,0242 ; 6717 CALL [PUTDST] ; AND STORE FILLER U 1377, 3252,2551,0705,1274,4007,0701,4000,0000,1443 ; 6718 =111 [BR]_AC[DLEN]-1 ;COUNT DOWN STRING LENGTH ; 6719 = U 3252, 3250,3440,0505,1174,4007,0700,0400,0000,1443 ; 6720 AC[DLEN]_[BR], J/BDFILL ;KEEP FILLING ; 6721 ; 6722 ;HERE TO STORE THE ANSWER ; 6723 ; 6724 DOCVT1: [ARX]_AC[1], ;GET LOW WORD U 3253, 3262,3771,0004,1276,6007,0701,0000,0000,1441 ; 6725 J/DOCVT2 ;ENTER LOOP FROM BOTTOM ; 6726 =010 ; 6727 BDECLP: [BR]_[BR]+1, ;COUNT DIGITS U 1602, 1512,0111,0705,4174,4007,0700,0010,0000,0000 ; 6728 CALL [BDSUB] ;KEEP SUBTRACTING 10**C(BRX) U 1606, 3254,3333,0003,7174,4007,0700,0400,0000,0247 ; 6729 =110 WORK[BDH]_[AR] ;SAVE BINARY ; 6730 = ; 6731 [AR]_[BR]+WORK[E1], ;OFFSET DIGIT U 3254, 1676,0551,0503,7274,4003,7701,0000,0000,0241 ; 6732 B DISP ;SEE WHICH MODE ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 151 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND -- BINARY TO DECIMAL CONVERSION ; 6733 =1110 READ [AR], LOAD VMA, ;TRANSLATE, START READING TABLE U 1676, 1500,3333,0003,4174,4007,0700,0200,0004,0012 ; 6734 START READ, J/BDTBL ; GO GET ENTRY FROM TABLE U 1677, 2000,3333,0004,7174,4007,0700,0400,0000,0250 ; 6735 BDSET: WORK[BDL]_[ARX] ;SAVE LOW BINARY U 2000, 3340,3771,0013,4370,4007,0700,0010,0000,0012 ; 6736 =00* STATE_[EDIT-DST], CALL [PUTDST] U 2006, 3255,2551,0705,1274,4007,0701,4000,0000,1443 ; 6737 =11* [BR]_AC[DLEN]-1 ;UPDATE STRING LENGTH U 3255, 3256,3771,0003,7274,4007,0701,0000,0000,0247 ; 6738 [AR]_WORK[BDH] U 3256, 3257,3771,0004,7274,4007,0701,0000,0000,0250 ; 6739 [ARX]_WORK[BDL] U 3257, 1372,4553,0500,4374,4007,0321,0000,0004,0000 ; 6740 TL [BR], #/040000 ;ARE WE CONVERTING 1B0? U 1372, 3264,0111,0704,4174,4007,0700,0000,0000,0000 ; 6741 =0 [ARX]_[ARX]+1, J/BDCFLG ;YES--FIX THE NUMBER AND CLEAR FLAG U 1373, 3260,3440,0303,0174,4007,0700,0400,0000,0000 ; 6742 DOCVT3: AC_[AR] U 3260, 3261,3440,0404,1174,4007,0700,0400,0000,1441 ; 6743 AC[1]_[ARX] U 3261, 3262,3440,0505,1174,4007,0700,0400,0000,1443 ; 6744 AC[DLEN]_[BR] ;STORE BACK NEW STRING LENGTH U 3262, 1374,1111,0706,4174,4007,0531,4000,0000,0000 ; 6745 DOCVT2: [BRX]_[BRX]-1, 3T, SKIP DP18 U 1374, 1602,2441,0705,4174,4467,0701,4000,0003,0000 ; 6746 =0 [BR]_-1, SET FPD, 3T, J/BDECLP U 1375, 0014,4221,0013,4170,4467,0700,0000,0005,0000 ; 6747 END STATE, CLR FPD, J/SKIP ; 6748 ; 6749 ;HERE TO TRANSLATE 1 DIGIT ; 6750 =0 ; 6751 BDTBL: END STATE, ;DON'T CHANGE BYTE POINTER IF ; 6752 ; THIS PAGE FAILS U 1500, 3544,4221,0013,4170,4007,0700,0010,0000,0000 ; 6753 CALL [LOADAR] ;GO PUT WORD IN AR U 1501, 1502,4553,0600,4374,4007,0331,0000,0077,7777 ; 6754 TR [BRX], #/777777 ;LAST DIGIT U 1502, 1677,4221,0003,4174,0007,0700,0000,0000,0000 ; 6755 =0 [AR]_0, HOLD RIGHT, J/BDSET U 1503, 1510,4553,0600,4374,4007,0321,0000,0010,0000 ; 6756 TL [BRX], #/100000 ;AND NEGATIVE U 1510, 1511,3770,0303,4344,4007,0700,0000,0000,0000 ; 6757 =0 [AR]_[AR] SWAP ;LAST AND MINUS, USE LH U 1511, 1677,4221,0003,4174,0007,0700,0000,0000,0000 ; 6758 [AR]_0, HOLD RIGHT, J/BDSET ; 6759 U 3263, 1505,3771,0003,7274,4007,0701,0000,0000,0247 ; 6760 BDABT: [AR]_WORK[BDH], J/DAC ; 6761 ; 6762 BDCFLG: [BR]_[BR].AND.NOT.#, ;CLEAR FLAG THAT TELLS US ; 6763 #/040000, HOLD RIGHT, ; TO SUBTRACT 1 AND U 3264, 1373,5551,0505,4374,0007,0700,0000,0004,0000 ; 6764 J/DOCVT3 ; CONTINUE CONVERTING ; 6765 ; 6766 ;SUBROUTINE TO SUBRTACT A POWER OF 10 FROM AR!ARX ; 6767 ;CALL WITH: ; 6768 ; AR!ARX/ NUMBER TO BE CONVERTED ; 6769 ; BRX(RIGHT)/ POWER OF 10 ; 6770 ;RETURNS: ; 6771 ; 2 RESULT IS STILL POSITIVE ; 6772 ; 6 RESULT WOULD HAVE BEEN NEGATIVE (RESTORE DONE) ; 6773 =0 ; 6774 BDSUB: [T0]_[BRX]+#, 3T, WORK/DECLO, ;ADDRESS OF LOW WORD U 1512, 1360,0551,0616,4374,4007,0701,0000,0000,0344 ; 6775 J/BDSUB1 ;NO INTERRUPT U 1513, 2507,4443,0000,4174,4007,0700,0000,0000,0000 ; 6776 J/FIXPC ;INTERRUPT ; 6777 =0* ; 6778 BDSUB1: [T1]_[T0], LOAD VMA, ;PUT IN VMA, U 1360, 1572,3441,1617,4174,4007,0700,0210,0000,0010 ; 6779 CALL [CLARX0] ;FIX UP SIGN OF LOW WORD ; 6780 [ARX]_[ARX]-RAM, 3T, ;SUBTRACT U 1362, 1562,1551,0404,6274,4007,0561,4000,0000,0000 ; 6781 SKIP CRY1 ;SEE IF OVERFLOW U 1562, 1563,1111,0703,4174,4007,0700,4000,0000,0000 ; 6782 =0 [AR]_[AR]-1 ;PROCESS CARRY U 1563, 3265,0551,0616,4374,4007,0701,0000,0000,0373 ; 6783 [T0]_[BRX]+#, 3T, WORK/DECHI ;ADDRESS OF HIGH WORD U 3265, 3266,3333,0016,4174,4007,0700,0200,0000,0010 ; 6784 READ [T0], LOAD VMA ;PLACE IN VMA ; 6785 [AR]_[AR]-RAM, 4T, ;SUBTRACT U 3266, 1572,1551,0303,6274,4007,0522,4000,0000,0000 ; 6786 SKIP DP0 ;SEE IF IT FIT ; 6787 =0 ; 6788 CLARX0: CLEAR ARX0, ;IT FIT, KEEP LOW WORD + U 1572, 0002,4551,0404,4374,0004,1700,0000,0037,7777 ; 6789 RETURN [2] ; AND RETURN U 1573, 3267,0551,0303,6274,4007,0700,0000,0000,0000 ; 6790 [AR]_[AR]+RAM ;RESTORE U 3267, 3270,3333,0017,4174,4007,0700,0200,0000,0010 ; 6791 READ [T1], LOAD VMA U 3270, 1604,0551,0404,6274,4007,0561,0000,0000,0000 ; 6792 [ARX]_[ARX]+RAM, 3T, SKIP CRY1 ; 6793 =0 ; 6794 BDSUB2: CLEAR ARX0, ;KEEP LOW WORD + U 1604, 0006,4551,0404,4374,0004,1700,0000,0037,7777 ; 6795 RETURN [6] ;RETURN OVERFLOW ; 6796 [AR]_[AR]+1, ;ADD BACK THE CARRY U 1605, 1604,0111,0703,4174,4007,0700,0000,0000,0000 ; 6797 J/BDSUB2 ;COMPLETE SUBTRACT ; 6798 ; 6799 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 152 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND -- EDIT -- MAIN LOOP ; 6800 .TOC "EXTEND -- EDIT -- MAIN LOOP" ; 6801 ; 6802 ;HERE FOR EDIT INSTRUCTION ; 6803 ;CALL WITH: ; 6804 ; AR/ E0 ADDRESS OF FILL, FLOAT, AND MESSAGE TABLE ; 6805 ; BR/ E1 TRANSLATE TABLE ; 6806 ; ; 6807 3741: ; 6808 EDIT: VMA_[AR]+1, START READ, ;FIRST GET FILL BYTE U 3741, 3346,0111,0703,4170,4007,0700,0210,0004,0012 ; 6809 CALL [GTFILL] ;GO GET IT U 3751, 1333,3771,0006,0276,6007,0700,0000,0000,0000 ; 6810 3751: [BRX]_AC ;GET PATTERN POINTER ; 6811 =0** TL [BRX], #/047777, ;MAKE SURE SECTION 0 U 1333, 3556,4553,0600,4374,4007,0321,0010,0004,7777 ; 6812 CALL [BITCHK] ; .. U 1337, 3271,3443,0600,4174,4007,0700,0200,0004,0012 ; 6813 EDITLP: VMA_[BRX], START READ ;FETCH PATTERN WORD U 3271, 3272,4221,0013,4170,4007,0700,0000,0000,0000 ; 6814 END STATE ;NO SPECIAL PAGE FAIL ACTION U 3272, 1646,3770,0605,4344,4007,0700,0000,0000,0000 ; 6815 [BR]_[BRX] SWAP ;GET PBN IN BITS 20 & 21 ; 6816 =0 [BR]_[BR]*4, ; .. U 1646, 3544,0115,0505,4174,4007,0700,0010,0000,0000 ; 6817 CALL [LOADAR] ;GET PATTERN WORD U 1647, 2014,3333,0005,4174,4003,1701,0000,0000,0000 ; 6818 READ [BR], 3T, DISP/DP LEFT ; 6819 =1100 U 2014, 1670,3770,0303,4344,4007,0700,2000,0071,0007 ; 6820 [AR]_[AR] SWAP, SC_7, J/MOVPAT ;(0) BITS 0-8 U 2015, 1671,3770,0303,4344,4007,0700,0000,0000,0000 ; 6821 [AR]_[AR] SWAP, J/MSKPAT ;(1) BITS 9-17 U 2016, 1670,3447,0303,4174,4007,0700,2000,0071,0006 ; 6822 [AR]_[AR]*.5, SC_6, J/MOVPAT ;(2) BITS 18-27 U 2017, 3273,4551,0303,4374,4007,0700,0000,0000,0777 ; 6823 [AR]_[AR].AND.#, #/777, J/EDISP ;(3) BITS 28-35 ; 6824 =0 U 1670, 1670,3447,0303,4174,4007,0630,2000,0060,0000 ; 6825 MOVPAT: [AR]_[AR]*.5, STEP SC, J/MOVPAT ;SHIFT OVER U 1671, 3273,4551,0303,4374,4007,0700,0000,0000,0777 ; 6826 MSKPAT: [AR]_[AR].AND.#, #/777 ; 6827 ; 6828 ;HERE WITH PATTERN BYTE RIGHT ADJUSTED IN AR U 3273, 1672,3447,0305,4174,4007,0700,2000,0071,0002 ; 6829 EDISP: [BR]_[AR]*.5, SC_2 ;SHIFT OVER ; 6830 =0 U 1672, 1672,3447,0505,4174,4007,0630,2000,0060,0000 ; 6831 EDISP1: [BR]_[BR]*.5, STEP SC, J/EDISP1 U 1673, 2021,3333,0005,4174,4003,5701,0000,0000,0000 ; 6832 READ [BR], 3T, DISP/DP ;LOOK AT HIGH 3 BITS ; 6833 =0001 ;(0) OPERATE GROUP ; 6834 [AR]-#, #/5, 4T, ; SEE IF 0-4 U 2021, 1674,1553,0300,4374,4007,0532,4000,0000,0005 ; 6835 SKIP DP18, J/EDOPR ; 6836 ;(1) MESSAGE BYTE ; 6837 READ [BRX], SKIP DP0, U 2023, 2062,3333,0006,4174,4007,0520,0000,0000,0000 ; 6838 J/EDMSG ; 6839 ;(2) UNDEFINED U 2025, 3313,4443,0000,4174,4007,0700,0000,0000,0000 ; 6840 J/EDNOP ; 6841 ;(3) UNDEFINED U 2027, 3313,4443,0000,4174,4007,0700,0000,0000,0000 ; 6842 J/EDNOP ; 6843 ;(4) UNDEFINED U 2031, 3313,4443,0000,4174,4007,0700,0000,0000,0000 ; 6844 J/EDNOP ; 6845 ;(5) SKIP IF M SET ; 6846 TL [BRX], #/100000, U 2033, 2072,4553,0600,4374,4007,0321,0000,0010,0000 ; 6847 J/EDSKP ; 6848 ;(6) SKIP IF N SET ; 6849 TL [BRX], #/200000, U 2035, 2072,4553,0600,4374,4007,0321,0000,0020,0000 ; 6850 J/EDSKP ; 6851 ;(7) SKIP ALWAYS U 2037, 2072,4443,0000,4174,4007,0700,0000,0000,0000 ; 6852 J/EDSKP ; 6853 ; 6854 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 153 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND -- EDIT -- DECODE OPERATE GROUP ; 6855 .TOC "EXTEND -- EDIT -- DECODE OPERATE GROUP" ; 6856 ; 6857 ;HERE FOR OPERATE GROUP. SKIP IF IN RANGE ; 6858 =0 U 1674, 3313,4443,0000,4174,4007,0700,0000,0000,0000 ; 6859 EDOPR: J/EDNOP ;OUT OF RANGE U 1675, 2050,3333,0003,4174,4003,5701,0000,0000,0000 ; 6860 READ [AR], 3T, DISP/DP ;DISPATCH ON TYPE U 2050, 3274,0111,0701,4174,4007,0700,0000,0000,0000 ; 6861 =1000 [PC]_[PC]+1, J/EDSTOP ;(0) STOP EDIT ; 6862 STATE_[EDIT-SRC], ;(1) SELECT SOURCE BYTE U 2051, 2005,3771,0013,4370,4007,0700,0000,0000,0011 ; 6863 J/EDSEL ; 6864 READ [BRX], SKIP DP0, ;(2) START SIGNIFICANCE U 2052, 1756,3333,0006,4174,4007,0520,0000,0000,0000 ; 6865 J/EDSSIG ; 6866 [BRX]_[BRX].AND.#, ;(3) FIELD SEPERATOR ; 6867 #/77777, HOLD RIGHT, U 2053, 3313,4551,0606,4374,0007,0700,0000,0007,7777 ; 6868 J/EDNOP U 2054, 2055,3771,0005,1276,6007,0701,0000,0000,1443 ; 6869 [BR]_AC[MARK] ;(4) EXCHANGE MARK AND DEST ; 6870 VMA_[BR], START READ, U 2055, 2002,3443,0500,4174,4007,0700,0200,0004,0012 ; 6871 J/EDEXMD ; 6872 = ; 6873 ; 6874 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 154 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND -- EDIT -- STOP EDIT ; 6875 .TOC "EXTEND -- EDIT -- STOP EDIT" ; 6876 ; 6877 ;HERE TO END AN EDIT OPERATION. PC IS SET TO SKIP IF NORMAL END ; 6878 ; OR NON-SKIP IF ABORT ; 6879 EDSTOP: [BR]_.NOT.[BRX], ;AD WILL NOT DO D.AND.NOT.A U 3274, 3275,7441,0605,4174,4007,0700,1000,0071,0010 ; 6880 FE_S#, S#/10 ;PRESET FE U 3275, 3276,3441,0603,4174,4007,0701,1000,0043,0000 ; 6881 [AR]_[BRX], 3T, FE_FE+P ;MOVE POINTER, UPBATE PBN ; 6882 [BR].AND.#, 3T, ;WAS OLD NUMBER 3? U 3276, 1752,4553,0500,4374,4007,0321,0000,0003,0000 ; 6883 #/030000, SKIP ADL.EQ.0 ; .. ; 6884 =0 U 1752, 1515,3770,0303,4334,4017,0700,0000,0041,0000 ; 6885 EDSTP1: [AR]_P, J/STAC ;NO--ALL DONE ; 6886 [AR]_[AR]+1, ;YES--BUMP WORD # ; 6887 FE_FE.AND.S#, S#/0700, ;KEEP ONLY FLAG BITS U 1753, 1752,0111,0703,4174,4007,0700,1000,0051,0700 ; 6888 J/EDSTP1 ;GO STOP EDIT ; 6889 ; 6890 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 155 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND -- EDIT -- START SIGNIFICANCE ; 6891 .TOC "EXTEND -- EDIT -- START SIGNIFICANCE" ; 6892 ; 6893 ;HERE WITH DST POINTER IN AR ; 6894 =110 U 1756, 3302,4443,0000,4174,4007,0700,0010,0000,0000 ; 6895 EDSSIG: CALL [EDFLT] ;STORE FLT CHAR U 1757, 3313,4443,0000,4174,4007,0700,0000,0000,0000 ; 6896 J/EDNOP ;DO NEXT PATTERN BYTE ; 6897 ; 6898 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 156 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND -- EDIT -- EXCHANGE MARK AND DESTINATION ; 6899 .TOC "EXTEND -- EDIT -- EXCHANGE MARK AND DESTINATION" ; 6900 ; 6901 ;HERE WITH ADDRESS OF MARK POINTER IN BR ; 6902 =0 ; 6903 EDEXMD: Q_AC[DSTP], ;GET DEST POINTER U 2002, 3544,3772,0000,1275,5007,0701,0010,0000,1444 ; 6904 CALL [LOADAR] ;GO PUT MARK IN AR U 2003, 3277,4443,0000,4174,4007,0700,0200,0003,0002 ; 6905 START WRITE ;START WRITE. SEPERATE STEP TO AVOID ; 6906 ; PROBLEM ON DPM5 U 3277, 3300,3223,0000,4174,4007,0701,0200,0000,0002 ; 6907 MEM WRITE, MEM_Q ;PUT OLD DEST IN MARK U 3300, 3313,3440,0303,1174,4007,0700,0400,0000,1444 ; 6908 AC[DSTP]_[AR], J/EDNOP ;PUT BACK DEST POINTER ; 6909 ; 6910 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 157 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND -- EDIT -- PROCESS SOURCE BYTE ; 6911 .TOC "EXTEND -- EDIT -- PROCESS SOURCE BYTE" ; 6912 ; 6913 =0* ; 6914 EDSEL: [AR]_AC[SRCP], ;PICK UP SRC POINTER U 2005, 2143,3771,0003,1276,6007,0701,0010,0000,1441 ; 6915 CALL [GETSRC] ;GET SOURCE BYTE U 2007, 2040,3447,0303,7174,4007,0700,0000,0000,0241 ; 6916 [AR]_[AR]*.5, WORK[E1] ;PREPARE TO TRANSLATE ; 6917 =000 [AR]_[AR]+WORK[E1], ;GO TRANSLATE BY HALFWORDS U 2040, 3333,0551,0303,7274,4007,0700,0010,0000,0241 ; 6918 2T, CALL [TRNAR] ; .. ; 6919 =010 ; 6920 EDFILL: READ [AR], ;(2) NO SIGNIFICANCE, GO FILL ; 6921 SKIP AD.EQ.0, ; SEE IF ANY FILLER U 2042, 2010,3333,0003,4174,4007,0621,0000,0000,0000 ; 6922 J/EDFIL1 ; GO TO IT ; 6923 STATE_[EDIT-SRC], ;(3) SIG START, DO FLOAT CHAR U 2043, 2056,3771,0013,4370,4007,0700,0000,0000,0011 ; 6924 J/EDSFLT U 2044, 3274,4443,0000,4174,4007,0700,0000,0000,0000 ; 6925 =100 J/EDSTOP ;(4) ABORT ; 6926 =101 ; 6927 EDSPUT: STATE_[EDIT-S+D], ;(5) NORMAL, STORE AT DST U 2045, 3340,3771,0013,4370,4007,0700,0010,0000,0013 ; 6928 CALL [PUTDST] ; .. ; 6929 =111 U 2047, 3313,4443,0000,4174,4007,0700,0000,0000,0000 ; 6930 J/EDNOP ;(7) BYTE STORED ; 6931 = ; 6932 ; 6933 ;HERE TO COMPLETE STORING FILL ; 6934 =0 U 2010, 2045,4443,0000,4174,4007,0700,0000,0000,0000 ; 6935 EDFIL1: J/EDSPUT ;STORE FILLER U 2011, 3313,4443,0000,4174,4007,0700,0000,0000,0000 ; 6936 J/EDNOP ;NO FILLER TO STORE ; 6937 ; 6938 ;HERE TO DO FLOAT BYTE ; 6939 =110 ; 6940 EDSFLT: WORK[FSIG]_[ARX], ;SAVE SIG CHAR U 2056, 3302,3333,0004,7174,4007,0700,0410,0000,0246 ; 6941 CALL [EDFLT] ;STORE FLOAT CHAR U 2057, 3301,3771,0003,7274,4007,0701,0000,0000,0246 ; 6942 [AR]_WORK[FSIG] ;RESTORE CHAR ; 6943 [AR]_[AR].AND.# CLR LH, ;JUST KEEP THE BYTE IN CASE ; 6944 #/77777, ; DEST BYTE .GT. 15 BITS U 3301, 2045,4251,0303,4374,4007,0700,0000,0007,7777 ; 6945 J/EDSPUT ;GO STORE CHAR WHICH STARTED THIS ALL ; 6946 ; 6947 ;SUBRUTINE TO PROCESS FLOAT CHAR ; 6948 ;CALL WITH: ; 6949 ; AR/ POINTER TO STORE @ MARK ; 6950 ;RETURN 7 WITH FLOAT STORED U 3302, 3303,3771,0005,1276,6007,0701,0000,0000,1443 ; 6951 EDFLT: [BR]_AC[MARK] ;ADDRESS OF MARK POINTER U 3303, 3304,3443,0500,4174,4007,0700,0200,0003,0012 ; 6952 VMA_[BR], START WRITE ;READY TO STORE U 3304, 3305,3771,0005,1276,6007,0701,0000,0000,1444 ; 6953 [BR]_AC[DSTP] ;GET DST POINTER U 3305, 2012,3333,0005,4175,5007,0701,0200,0000,0002 ; 6954 MEM WRITE, MEM_[BR] ;STORE POINTER ; 6955 =0 [AR]_0 XWD [2], ;FETCH FLOAT CHAR U 2012, 3307,4751,1203,4374,4007,0700,0010,0000,0002 ; 6956 CALL [EDBYTE] ;GET TBL BYTE ; 6957 MEM READ, [AR]_MEM, ;GET FLOAT CHAR U 2013, 2060,3771,0003,4365,5007,0621,0200,0000,0002 ; 6958 SKIP AD.EQ.0 ;SEE IF NULL ; 6959 =000 ; 6960 [FLG]_[FLG].OR.#, ;REMEMBER TO BACKUP DST POINTER ; 6961 STATE/EDIT-DST, ; WILL ALSO BACKUP SRC IF CALLED ; 6962 HOLD LEFT, ; FROM SELECT U 2060, 3340,3551,1313,4370,4007,0700,0010,0000,0012 ; 6963 CALL [PUTDST] ; STORE FLOAT ; 6964 =001 [BRX]_[BRX].OR.#, #/400000, U 2061, 3306,3551,0606,4374,0007,0700,0000,0040,0000 ; 6965 HOLD RIGHT, J/EDFLT1 ;NULL ; 6966 =110 [BRX]_[BRX].OR.#, #/400000, U 2066, 3306,3551,0606,4374,0007,0700,0000,0040,0000 ; 6967 HOLD RIGHT, J/EDFLT1 ;MARK STORED ; 6968 = ; 6969 EDFLT1: AC_[BRX], ;SAVE FLAGS SO WE DON'T ; 6970 ;TRY TO DO THIS AGAIN IF ; 6971 ;NEXT STORE PAGE FAILS U 3306, 0007,3440,0606,0174,4004,1700,0400,0000,0000 ; 6972 RETURN [7] ;AND RETURN ; 6973 ; 6974 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 158 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND -- EDIT -- MESSAGE BYTE ; 6975 .TOC "EXTEND -- EDIT -- MESSAGE BYTE" ; 6976 ; 6977 ;HERE WITH SKIP ON S ; 6978 =0 ; 6979 EDMSG: [AR]_WORK[FILL], ;GET FILL BYTE ; 6980 SKIP AD.EQ.0, 4T, ;SEE IF NULL U 2062, 2070,3771,0003,7274,4007,0622,0000,0000,0244 ; 6981 J/EDMSG1 ;GO STORE ; 6982 [AR]_[AR].AND.# CLR LH, ;GET OFFSET INTO TABLE U 2063, 2064,4251,0303,4374,4007,0700,0000,0000,0077 ; 6983 #/77 ; 6984 =0 [AR]_[AR]+1, WORK[E0], ;PLUS 1 U 2064, 3307,0111,0703,7174,4007,0700,0010,0000,0240 ; 6985 CALL [EDBYTE] ;GET TBL BYTE U 2065, 2070,3771,0003,4365,5007,0700,0200,0000,0002 ; 6986 MEM READ, [AR]_MEM ;FROM MEMORY ; 6987 =000 ; 6988 EDMSG1: STATE_[EDIT-DST], ;WHAT TO DO ON PAGE FAILS U 2070, 3340,3771,0013,4370,4007,0700,0010,0000,0012 ; 6989 CALL [PUTDST] ;STORE MESSAGE BYTE U 2071, 3313,4443,0000,4174,4007,0700,0000,0000,0000 ; 6990 =001 J/EDNOP ;NULL FILLER U 2076, 3313,4443,0000,4174,4007,0700,0000,0000,0000 ; 6991 =110 J/EDNOP ;NEXT BYTE ; 6992 = ; 6993 U 3307, 3310,0551,0303,7274,4007,0701,0000,0000,0240 ; 6994 EDBYTE: [AR]_[AR]+WORK[E0] ;GET OFFSET INTO TABLE ; 6995 VMA_[AR], START READ, ;START MEMORY CYCLE U 3310, 0001,3443,0300,4174,4004,1700,0200,0004,0012 ; 6996 RETURN [1] ;RETURN TO CALLER ; 6997 ; 6998 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 159 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND -- EDIT -- SKIP ; 6999 .TOC "EXTEND -- EDIT -- SKIP" ; 7000 ; 7001 =0 ; 7002 ;HERE TO SKIP ALWAYS ; 7003 EDSKP: [AR]_[AR].AND.#, #/77, ;JUST KEEP SKIP DISTANCE U 2072, 3311,4551,0303,4374,4007,0700,0000,0000,0077 ; 7004 J/EDSKP1 ;CONTINUE BELOW ; 7005 ;HERE IF WE DO NOT WANT TO SKIP U 2073, 3313,4443,0000,4174,4007,0700,0000,0000,0000 ; 7006 J/EDNOP U 3311, 3312,0115,0703,4174,4007,0700,0000,0000,0000 ; 7007 EDSKP1: [AR]_([AR]+1)*2 ;GIVE 1 EXTRA SKIP ; 7008 READ [AR], SCAD/A*2, ;PUT THE ADJUSTMENT ; 7009 SCADA/BYTE5, 3T, LOAD SC, ; THE SC U 3312, 3314,3333,0003,4174,4007,0701,2000,0007,0000 ; 7010 J/EDNOP1 ;JOIN MAIN LOOP ; 7011 ; 7012 ; 7013 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 160 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND -- EDIT -- ADVANCE PATTERN POINTER ; 7014 .TOC "EXTEND -- EDIT -- ADVANCE PATTERN POINTER" ; 7015 U 3313, 3314,4443,0000,4174,4007,0700,2000,0071,0000 ; 7016 EDNOP: SC_0 ;NO SKIP U 3314, 3315,3333,0006,4174,4007,0701,1000,0073,0000 ; 7017 EDNOP1: READ [BRX], 3T, FE_P ;PUT PBN IN FE U 3315, 3316,4443,0000,4174,4007,0700,1000,0051,0030 ; 7018 FE_FE.AND.S#, S#/30 ;JUST BYTE # U 3316, 3317,4443,0000,4174,4007,0700,1000,0040,0000 ; 7019 FE_FE+SC ;ADD IN ANY SKIP DISTANCE U 3317, 3320,4443,0000,4174,4007,0700,1000,0041,0010 ; 7020 FE_FE+S#, S#/10 ;BUMP PBN ; 7021 [AR]_FE, ;GET NUMBER OF WORDS U 3320, 3321,3777,0003,4334,4057,0700,2000,0041,0000 ; 7022 LOAD SC ;PUT MSB WHERE IT CAN BE TESTED ; 7023 ; QUICKLY ; 7024 [AR]_[AR].AND.# CLR LH, ;KEEP ONLY 1 COPY U 3321, 2074,4251,0303,4374,4007,0630,0000,0000,0170 ; 7025 #/170, SKIP/SC ; .. ; 7026 =0 ; 7027 EDN1A: [AR]_[AR]*.5, SC_0, U 2074, 2100,3447,0303,4174,4007,0700,2000,0071,0000 ; 7028 J/EDNOP2 ;READY TO SHIFT OFF BYTE WITHIN ; 7029 ; WORD ; 7030 [AR]_[AR].OR.#, #/200, ;GET THE SIGN BIT OF THE FE ; 7031 HOLD LEFT, ; INTO THE AR. ONLY HAPPENS ON U 2075, 2074,3551,0303,4370,4007,0700,0000,0000,0200 ; 7032 J/EDN1A ; SKP 76 OR SKP 77 ; 7033 =0 U 2100, 2100,3447,0303,4174,4007,0630,2000,0060,0000 ; 7034 EDNOP2: [AR]_[AR]*.5, STEP SC, J/EDNOP2 ; 7035 [BRX]_[BRX]+[AR], ;UPDATE WORD ADDRESS U 2101, 3322,0111,0306,4170,4007,0700,0000,0000,0000 ; 7036 HOLD LEFT U 3322, 3323,3770,0303,4334,4017,0700,0000,0041,0000 ; 7037 [AR]_P ;PUT PBN BACK IN BRX ; 7038 [BRX]_[BRX].AND.#, ;JUST KEEP FLAGS ; 7039 #/700000, ; .. U 3323, 3324,4551,0606,4374,0007,0700,0000,0070,0000 ; 7040 HOLD RIGHT ; 7041 [AR]_[AR].AND.#, ;JUST KEEP PBN U 3324, 3325,4551,0303,4374,4007,0700,0000,0003,0000 ; 7042 #/030000 ; 7043 [BRX]_[BRX].OR.[AR], ;FINAL ANSWER U 3325, 3326,3111,0306,4174,0007,0700,0000,0000,0000 ; 7044 HOLD RIGHT U 3326, 1337,3440,0606,0174,4007,0700,0400,0000,0000 ; 7045 AC_[BRX], J/EDITLP ;DO NEXT FUNCTION ; 7046 ; 7047 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 161 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND SUBROUTINES -- FILL OUT DESTINATION ; 7048 .TOC "EXTEND SUBROUTINES -- FILL OUT DESTINATION" ; 7049 ; 7050 ;CALL WITH ; 7051 ; AC[DLEN]/ NEGATIVE NUMBER OF BYTES LEFT IN DEST ; 7052 ; FILL/ FILL BYTE ; 7053 ; RETURN [2] WITH FILLERS STORED ; 7054 ; ; 7055 ;NOTE: THIS ROUTINE NEED NOT TEST FOR INTERRUPTS ON EACH BYTE ; 7056 ; BECAUSE EVERY BYTE STORE DOES A MEMORY READ. ; 7057 ; ; 7058 =01* ; 7059 MOVF1: [AR]_WORK[FILL], 2T, ;GET FILL BYTE U 1603, 3340,3771,0003,7274,4007,0700,0010,0000,0244 ; 7060 CALL [PUTDST] ;PLACE IN DEST U 1607, 3327,3771,0003,1276,6007,0701,0000,0000,1443 ; 7061 [AR]_AC[DLEN] ;AMOUNT LEFT ; 7062 AC[DLEN]_[AR]+1, 3T, ;STORE UPDATED LEN U 3327, 2102,0113,0703,1174,4007,0521,0400,0000,1443 ; 7063 SKIP DP0 ; AND SEE IF DONE U 2102, 0002,4443,0000,4174,4004,1700,0000,0000,0000 ; 7064 =0 RETURN [2] ;DONE U 2103, 1603,4443,0000,7174,4007,0700,0000,0000,0244 ; 7065 MOVFIL: WORK[FILL], J/MOVF1 ;DO ANOTHER BYTE ; 7066 ;ENTERING HERE SAVES 150NS ; 7067 ; PER BYTE BUT COSTS 300NS ; 7068 ; PER FIELD MOVED. I ASSUME (BUT DO ; 7069 ; NOT KNOW) THAT THIS SPEEDS ; 7070 ; THINGS UP. ; 7071 ; 7072 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 162 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND SUBROUTINES -- GET MODIFIED SOURCE BYTE ; 7073 .TOC"EXTEND SUBROUTINES -- GET MODIFIED SOURCE BYTE" ; 7074 ; 7075 ;CALL WITH: ; 7076 ;SLEN = MINUS LENGTH OF STRING ; 7077 ;MSK = MASK FOR BYTE SIZE (1 IF BIT MUST BE ZERO) ; 7078 ;E1 = EFFECTIVE ADDRESS OF OPERATION WORD (SIGN EXTENDED IF OFFSET) ; 7079 ; [AR]_WORK[SLEN]+1, CALL [SRCMOD] ; 7080 ;RETURNS: ; 7081 ; 1 LENGTH EXHAUSTED ; 7082 ; 2 (EDIT ONLY) NO SIGNIFICANCE ; 7083 ; 3 (EDIT ONLY) SIGNIFICANCE START: ; 7084 ; 4 ABORT: OUT OF RANGE OR TRANSLATE FAILURE ; 7085 ; 5 NORMAL: BYTE IN AR ; 7086 ; ; 7087 ;DROM B SET AS FOLLOWS: ; 7088 ; 0 TRANSLATE ; 7089 ; 1 OFFSET ; 7090 ; 2 EDIT ; 7091 ; 4 CVTDBT ; 7092 =00 ; 7093 SRCMOD: WORK[SLEN]_[AR], ;PUT BACK SOURCE LENGTH ; 7094 SKIP DP0, ;SEE IF DONE U 2104, 2142,3333,0003,7174,4007,0520,0410,0000,0242 ; 7095 CALL [GSRC] ;GET A SOURCE BYTE U 2105, 0001,4221,0013,4170,4004,1700,0000,0000,0000 ; 7096 END STATE, RETURN [1] ;DONE U 2106, 2116,4443,0000,7174,4003,7700,0000,0000,0241 ; 7097 WORK[E1], B DISP ;OFFSET OR TRANSLATE? ; 7098 = U 2116, 3332,3447,0303,4174,4007,0700,0000,0000,0000 ; 7099 =1110 [AR]_[AR]*.5, J/XLATE ;TRANSLATE U 2117, 3330,3770,0303,7174,0007,0700,0000,0000,0241 ; 7100 FIX [AR] SIGN, WORK[E1] ;IF WE ARE PROCESSING FULL WORD ; 7101 ; BYTES, AND THEY ARE NEGATIVE, ; 7102 ; AND THE OFFSET IS POSITIVE THEN ; 7103 ; WE HAVE TO MAKE BITS -1 AND -2 ; 7104 ; COPIES OF THE SIGN BIT. U 3330, 3331,0551,0303,7274,4007,0700,0000,0000,0241 ; 7105 [AR]_[AR]+WORK[E1], 2T ;OFFSET ; 7106 [AR].AND.WORK[MSK], ;VALID BYTE? ; 7107 SKIP AD.EQ.0, 4T, ;SKIP IF OK U 3331, 0004,4553,0300,7274,4004,1622,0000,0000,0243 ; 7108 RETURN [4] ;RETURN 4 IF BAD, 5 IF OK ; 7109 ; 7110 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 163 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND SUBROUTINES -- TRANSLATE ; 7111 .TOC "EXTEND SUBROUTINES -- TRANSLATE" ; 7112 ; 7113 ;HERE WITH BYTE IN AR 1-36. FETCH TABLE ENTRY. U 3332, 3333,0551,0303,7274,4007,0701,0000,0000,0241 ; 7114 XLATE: [AR]_[AR]+WORK[E1] ;COMPUTE ADDRESS ; 7115 TRNAR: READ [AR], LOAD VMA, ;FETCH WORD U 3333, 2110,3333,0003,4174,4007,0700,0200,0004,0012 ; 7116 START READ ; .. ; 7117 =0 [AR]_[AR]*2, ;GET BACK LSB ; 7118 ;BIT 36 IS NOT PRESERVED ; 7119 ; BY PAGE FAILS U 2110, 3545,3445,0303,4174,4007,0700,0010,0000,0000 ; 7120 CALL [LOADARX] ;PUT ENTRY IN ARX U 2111, 2112,4553,0300,4374,4007,0331,0000,0000,0001 ; 7121 TR [AR], #/1 ;WHICH HALF? ; 7122 =0 ; 7123 XLATE1: [AR]_[ARX], 3T, ;RH -- COPY TO AR ; 7124 DISP/DP LEFT, ;DISPATCH ON CODE U 2112, 2121,3441,0403,4174,4003,1701,0000,0000,0000 ; 7125 J/TRNFNC ;DISPATCH TABLE ; 7126 [ARX]_[ARX] SWAP, ;LH -- FLIP AROUND U 2113, 2112,3770,0404,4344,4007,0700,0000,0000,0000 ; 7127 J/XLATE1 ;START SHIFT ; 7128 ; 7129 ;HERE ON TRANSLATE OPERATION TO PERFORM FUNCTIONS REQUIRED BY ; 7130 ; THE 3 HIGH ORDER BITS OF THE TRANSLATE FUNCTION HALFWORD. WE ; 7131 ; DISPATCH ON FUNCTION AND HAVE: ; 7132 ; BRX/ FLAGS ; 7133 ; ARX/ TABLE ENTRY IN RH ; 7134 ; ; 7135 =0001 ; 7136 ;(0) NOP ; 7137 TRNFNC: READ [BRX], SKIP DP0, ;S FLAG ALREADY SET? U 2121, 2114,3333,0006,4174,4007,0520,0000,0000,0000 ; 7138 J/TRNRET ; .. ; 7139 ;(1) ABORT U 2123, 0004,4443,0000,4174,4004,1700,0000,0000,0000 ; 7140 RETURN [4] ; 7141 ;(2) CLEAR M FLAG ; 7142 [BRX]_[BRX].AND.NOT.#, ; 7143 #/100000, HOLD RIGHT, U 2125, 2121,5551,0606,4374,0007,0700,0000,0010,0000 ; 7144 J/TRNFNC ; 7145 ;(3) SET M FLAG ; 7146 [BRX]_[BRX].OR.#, ; 7147 #/100000, HOLD RIGHT, U 2127, 2121,3551,0606,4374,0007,0700,0000,0010,0000 ; 7148 J/TRNFNC ; 7149 ;(4) SET N FLAG ; 7150 TRNSIG: [BRX]_[BRX].OR.#, ; 7151 #/200000, HOLD RIGHT, U 2131, 2121,3551,0606,4374,0007,0700,0000,0020,0000 ; 7152 J/TRNFNC ; 7153 ;(5) SET N FLAG THEN ABORT ; 7154 [BRX]_[BRX].OR.#, ; 7155 #/200000, HOLD RIGHT, U 2133, 0004,3551,0606,4374,0004,1700,0000,0020,0000 ; 7156 RETURN [4] ; 7157 ;(6) CLEAR M THEN SET N ; 7158 [BRX]_[BRX].AND.NOT.#, ; 7159 #/100000, HOLD RIGHT, U 2135, 2131,5551,0606,4374,0007,0700,0000,0010,0000 ; 7160 J/TRNSIG ; 7161 ;(7) SET N AND M ; 7162 [BRX]_[BRX].OR.#, ; 7163 #/300000, HOLD RIGHT, U 2137, 2121,3551,0606,4374,0007,0700,0000,0030,0000 ; 7164 J/TRNFNC ; 7165 ; 7166 ;HERE TO COMPLETE A TRANSLATE ; 7167 ; 7168 =0 ; 7169 TRNRET: READ [ARX], SKIP DP18, ;S-FLAG IS ZERO ; 7170 B DISP, SKIP DP18, ;SEE IF EDIT OR SIG START U 2114, 2154,3333,0004,4174,4003,7530,0000,0000,0000 ; 7171 J/TRNSS ; .. ; 7172 TRNSS1: [AR]_[ARX].AND.# CLR LH, ;S IS SET, JUST RETURN BYTE U 2115, 0005,4251,0403,4374,4004,1700,0000,0007,7777 ; 7173 #/77777, RETURN [5] ; .. ; 7174 ; 7175 =1100 ; 7176 TRNSS: [AR]_AC[DLEN], ;NO SIG ON MOVE OR D2B U 2154, 2173,3771,0003,1276,6003,7701,0000,0000,1443 ; 7177 B DISP, J/TRNNS1 ;SEE IF D2B ; 7178 [BRX]_[BRX].OR.#, ;SIG START ON MOVE OR D2B ; 7179 #/400000, HOLD RIGHT, U 2155, 2115,3551,0606,4374,0007,0700,0000,0040,0000 ; 7180 J/TRNSS1 ;RETURN BYTE ; 7181 [AR]_WORK[FILL], ;EDIT--NO SIG RETURN FILL U 2156, 0002,3771,0003,7274,4004,1701,0000,0000,0244 ; 7182 RETURN [2] ; .. ; 7183 [AR]_AC[DSTP], ;EDIT--START OF SIG U 2157, 0003,3771,0003,1276,6004,1701,0000,0000,1444 ; 7184 RETURN [3] ; .. ; 7185 ; 7186 =1011 U 2173, 3334,1111,0703,4174,4007,0700,4000,0000,0000 ; 7187 TRNNS1: [AR]_[AR]-1, J/TRNNS2 ;COMPENSATE FOR IGNORING SRC ; 7188 [AR]_WORK[SLEN]+1, ;DEC TO BIN HAS NO DEST LENGTH U 2177, 2104,0551,0703,7274,4007,0701,0000,0000,0242 ; 7189 J/SRCMOD ;JUST UPDATE SRC LENTH ; 7190 TRNNS2: AC[DLEN]_[AR] TEST, ;PUT BACK DLEN AND U 3334, 2140,3770,0303,1174,4007,0520,0400,0000,1443 ; 7191 SKIP DP0 ; SEE WHICH IS NOW SHORTER ; 7192 =0 [AR]_WORK[SLEN], ;DEST IS SHORTER. DO NOT CHANGE U 2140, 2104,3771,0003,7274,4007,0701,0000,0000,0242 ; 7193 J/SRCMOD ; AMOUNT LEFT ; 7194 [AR]_WORK[SLEN]+1, ;GO LOOK AT NEXT BYTE U 2141, 2104,0551,0703,7274,4007,0701,0000,0000,0242 ; 7195 J/SRCMOD ; 7196 ; 7197 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 164 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND SUBROUTINES -- GET UNMODIFIED SOURCE BYTE ; 7198 .TOC "EXTEND SUBROUTINES -- GET UNMODIFIED SOURCE BYTE" ; 7199 ; 7200 ;CALL: ; 7201 ; GSRC WITH SKIP ON SOURCE LENGTH ; 7202 ; GETSRC IF LENGHT IS OK ; 7203 ;WITH: ; 7204 ; AC1/ SOURCE BYTE POINTER ; 7205 ;RETURNS: ; 7206 ; 1 IF LENGTH RAN OUT ; 7207 ; 2 IF OK (BYTE IN AR) ; 7208 ; ; 7209 =0 ; 7210 GSRC: [AR]_AC[DLEN], ;LENGTH RAN OUT U 2142, 0001,3771,0003,1276,6004,1701,0000,0000,1443 ; 7211 RETURN [1] ;RESTORE AR AND RETURN U 2143, 3335,3771,0003,1276,6007,0701,0000,0000,1441 ; 7212 GETSRC: [AR]_AC[SRCP] ;GET SRC PTR ; 7213 IBP DP, IBP SCAD, ;UPDATE BYTE POINTER U 3335, 2145,3770,0305,4334,4016,7701,0000,0033,6000 ; 7214 SCAD DISP, 3T ;SEE IF OFLOW U 2145, 3337,3441,0503,4174,4007,0700,0000,0000,0000 ; 7215 =01 [AR]_[BR], J/GSRC1 ;NO OFLOW U 2147, 3336,3770,0503,4334,4017,0700,0000,0032,6000 ; 7216 SET P TO 36-S ;RESET P U 3336, 3337,0111,0703,4170,4007,0700,0000,0000,0000 ; 7217 [AR]_[AR]+1, HOLD LEFT ;BUMP Y ; 7218 U 3337, 2150,3440,0303,1174,4007,0700,0400,0000,1441 ; 7219 GSRC1: AC[SRCP]_[AR] ;STORE UPDATED POINTER ; 7220 =0 READ [AR], LOAD BYTE EA, ;SETUP TO FIGURE OUT U 2150, 2744,3333,0003,4174,4217,0701,1010,0073,0500 ; 7221 FE_P, 3T, CALL [BYTEAS] ; EFFECTIVE ADDRESS ; 7222 READ [AR], ;LOOK AT POINTER ; 7223 BYTE DISP, ;SEE IF 7 BIT ; 7224 FE_FE.AND.S#, S#/0770, ;MASK OUT P FIELD U 2151, 0550,3333,0003,4174,4006,5701,1000,0051,0770 ; 7225 J/LDB1 ;GO GET THE BYTE ; 7226 ; 7227 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 165 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND SUBROUTINES -- STORE BYTE IN DESTINATION STRING ; 7228 .TOC "EXTEND SUBROUTINES -- STORE BYTE IN DESTINATION STRING" ; 7229 ; 7230 ;CALL WITH: ; 7231 ; AR/ BYTE TO STORE ; 7232 ; AC4/ DESTINATION BYTE POINTER ; 7233 ;RETURNS: ; 7234 ; AR & AC4/ UPDATED BYTE POINTER ; 7235 ; ARX/ BYTE TO STORE ; 7236 ; BR/ WORD TO MERGE WITH ; 7237 ; 6 ALWAYS ; 7238 ; U 3340, 2152,3441,0304,4174,4007,0700,0000,0000,0000 ; 7239 PUTDST: [ARX]_[AR] ;SAVE BYTE ; 7240 =0 [AR]_AC[DSTP], ;GET DEST POINTER U 2152, 3341,3771,0003,1276,6007,0701,0010,0000,1444 ; 7241 CALL [IDST] ;BUMP DEST POINTER ; 7242 AD/A+B, A/ARX, B/ARX, ;SHIFT 7-BIT BYTE TO ; 7243 SCAD/A, 3T, ; NATURAL PLACE, AND PUT U 2153, 2020,0113,0404,4174,4007,0701,1000,0077,0000 ; 7244 SCADA/BYTE5, LOAD FE ; INTO FE ; 7245 =0* READ [AR], BYTE DISP, ;GO PUT BYTE IN MEMORY U 2020, 0560,3333,0003,4174,4006,5701,0010,0000,0000 ; 7246 CALL [DPB1] ; .. U 2022, 0006,4443,0000,4174,4004,1700,0000,0000,0000 ; 7247 RETURN [6] ;ALL DONE ; 7248 ; 7249 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 166 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND SUBROUTINES -- UPDATE DEST STRING POINTERS ; 7250 .TOC "EXTEND SUBROUTINES -- UPDATE DEST STRING POINTERS" ; 7251 ; 7252 ; 7253 ;SUBROUTINE TO BUMP DST POINTERS ; 7254 ;CALL WITH: ; 7255 ; AR/ AC[DSTP] ; 7256 ; RETURN 1 WITH UPDATED POINTER STORED ; 7257 ; U 3341, 2024,3770,0305,4334,4016,7701,0000,0033,6000 ; 7258 IDST: IBP DP, IBP SCAD, SCAD DISP, 3T U 2024, 3343,3441,0503,4174,4217,0700,0000,0000,0600 ; 7259 =0* [AR]_[BR], LOAD DST EA, J/IDSTX U 2026, 3342,3770,0503,4334,4017,0700,0000,0032,6000 ; 7260 SET P TO 36-S U 3342, 3343,0111,0703,4170,4217,0700,0000,0000,0600 ; 7261 [AR]_[AR]+1, HOLD LEFT, LOAD DST EA ; 7262 IDSTX: AC[DSTP]_[AR], 3T, ;STORE PTR BACK U 3343, 2030,3440,0303,1174,4006,6701,1400,0073,1444 ; 7263 FE_P, DISP/EAMODE ;SAVE P FOR CMPDST ; 7264 =100* U 2030, 2747,0553,0300,2274,4007,0701,0200,0004,0712 ; 7265 DSTEA: VMA_[AR]+XR, START READ, PXCT BYTE DATA, 3T, J/BYTFET U 2032, 2747,3443,0300,4174,4007,0700,0200,0004,0712 ; 7266 VMA_[AR], START READ, PXCT BYTE DATA, J/BYTFET U 2034, 3344,0553,0300,2274,4007,0701,0200,0004,0612 ; 7267 VMA_[AR]+XR, START READ, PXCT/BIS-DST-EA, 3T, J/DSTIND U 2036, 3344,3443,0300,4174,4007,0700,0200,0004,0612 ; 7268 VMA_[AR], START READ, PXCT/BIS-DST-EA, J/DSTIND ; 7269 U 3344, 3345,3771,0003,4361,5217,0700,0200,0000,0602 ; 7270 DSTIND: MEM READ, [AR]_MEM, HOLD LEFT, LOAD DST EA U 3345, 2030,4443,0000,2174,4006,6700,0000,0000,0000 ; 7271 EA MODE DISP, J/DSTEA ; 7272 ; 7273 ; 7274 ;HERE TO TEST ILLEGAL BITS SET ; 7275 ;CALL WITH: ; 7276 ; SKIP IF ALL BITS LEGAL ; 7277 ; RETURN [4] IF OK, ELSE DO UUO ; 7278 ; ; 7279 3556: ;EXTEND OF 0 COMES HERE U 3556, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 7280 BITCHK: UUO U 3557, 0004,4443,0000,4174,4004,1700,0000,0000,0000 ; 7281 3557: RETURN [4] ; 7282 ; 7283 ;HERE TO PUT FILL IN [AR] AND WORK[FILL] ; 7284 GTFILL: MEM READ, ;WAIT FOR DATA U 3346, 3347,3771,0003,4365,5007,0700,0200,0000,0002 ; 7285 [AR]_MEM ;PLACE IN AR ; 7286 WORK[FILL]_[AR], ;SAVE FOR LATER U 3347, 0010,3333,0003,7174,4004,1700,0400,0000,0244 ; 7287 RETURN [10] ;RETURN TO CALLER ; 7288 ; 7289 ;SUBROUTINE TO CLEAR FLAGS IN AR ; 7290 CLRFLG: [AR]_[AR].AND.#, ;CLEAR FLAGS IN AR ; 7291 #/000777, ; .. U 3350, 0001,4551,0303,4374,0004,1700,0000,0000,0777 ; 7292 HOLD RIGHT, RETURN [1] ; 7293 ; 7294 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 167 ; DSK: KSHACK; EXTEND 4 20:01:38 16-JAN-87 EXTEND -- PAGE FAIL CLEANUP ; 7295 .TOC "EXTEND -- PAGE FAIL CLEANUP" ; 7296 ; 7297 ;BACK UP SOURCE POINTER ; 7298 =0 ; 7299 BACKS: [AR]_AC[SRCP], U 2160, 3363,3771,0003,1276,6007,0701,0010,0000,1441 ; 7300 CALL [BACKBP] ;BACKUP BP U 2161, 3656,3440,0505,1174,4007,0700,0400,0000,1441 ; 7301 AC[SRCP]_[BR], J/CLDISP ; 7302 U 3351, 3352,3771,0003,7274,4007,0701,0000,0000,0214 ; 7303 CMSDST: [AR]_WORK[SV.BRX] ;GET OLD SRC LEN U 3352, 2162,0113,0703,0174,4007,0701,0400,0000,0000 ; 7304 AC_[AR]+1, 3T ;BACK UP ; 7305 ;BACK UP DESTINATION POINTER ; 7306 =0 ; 7307 BACKD: [AR]_AC[DSTP], U 2162, 3363,3771,0003,1276,6007,0701,0010,0000,1444 ; 7308 CALL [BACKBP] U 2163, 3656,3440,0505,1174,4007,0700,0400,0000,1444 ; 7309 AC[DSTP]_[BR], J/CLDISP ; 7310 ; 7311 ;FAILURES DURING MOVE STRING (BACKUP LENGTHS) U 3353, 3354,1771,0003,7274,4007,0701,4000,0000,0242 ; 7312 STRPF: [AR]_-WORK[SLEN] ;GET AMOUNT LEFT ; 7313 STRPF0: [BR]_AC[DLEN], 4T, ;WHICH STRING IS LONGER? U 3354, 2164,3771,0005,1276,6007,0522,0000,0000,1443 ; 7314 SKIP DP0 ; 7315 =0 U 2164, 3356,3440,0303,1174,4007,0700,0400,0000,1443 ; 7316 STRPF1: AC[DLEN]_[AR], J/STPF1A ;SRC LONGER U 2165, 2166,3441,0304,4174,4007,0700,0000,0000,0000 ; 7317 [ARX]_[AR] ;COPY SRC LENGTH ; 7318 =0 [ARX]_[ARX].OR.WORK[SV.BRX], ;REBUILD FLAGS U 2166, 3560,3551,0404,7274,4007,0701,0010,0000,0214 ; 7319 CALL [AC_ARX] ;RESET AC]SLEN] U 2167, 3355,1111,0503,4174,4007,0700,4000,0000,0000 ; 7320 [AR]_[AR]-[BR] ;MAKE DEST LEN ; 7321 STRPF3: AC[DLEN]_[AR], ;PUT BACK DEST LEN U 3355, 3656,3440,0303,1174,4007,0700,0400,0000,1443 ; 7322 J/CLDISP ;DO NEXT CLEANUP ; 7323 U 3356, 3360,0111,0503,4174,4007,0700,0000,0000,0000 ; 7324 STPF1A: [AR]_[AR]+[BR], J/STRPF2 ; 7325 U 3357, 3360,1771,0003,7274,4007,0701,4000,0000,0242 ; 7326 PFDBIN: [AR]_-WORK[SLEN] ;RESTORE LENGTH U 3360, 3361,3551,0303,7274,4007,0701,0000,0000,0214 ; 7327 STRPF2: [AR]_[AR].OR.WORK[SV.BRX] U 3361, 3656,3440,0303,0174,4007,0700,0400,0000,0000 ; 7328 PFGAC0: AC_[AR], J/CLDISP ;PUT BACK SRC LEN AND FLAGS ; 7329 U 3362, 3354,7771,0003,7274,4007,0701,0000,0000,0242 ; 7330 STRPF4: [AR]_.NOT.WORK[SLEN], J/STRPF0 ; 7331 ; 7332 BACKBP: IBP DP, SCAD/A+B, SCADA/BYTE1, SCADB/SIZE, ;P_P+S U 3363, 0001,3770,0305,4334,4014,1700,0000,0043,6000 ; 7333 RETURN [1] ; 7334 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 168 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 EXTEND -- PAGE FAIL CLEANUP ; 7335 ;;;-*-Fundamental-*- ; 7336 ; 7337 .TOC "TRAPS" ; 7338 U 3364, 3365,3741,0104,4074,4007,0700,0000,0000,0000 ; 7339 TRAP: [ARX]_PC WITH FLAGS ;SAVE THE PC WHICH CAUSED THE ; 7340 WORK[TRAPPC]_[ARX], ; TRAP U 3365, 2170,3333,0004,7174,4007,0340,0400,0000,0425 ; 7341 SKIP KERNEL ;SEE IF UBR OR EBR ; 7342 =0 [AR]_[AR]+[UBR], ;ADDRESS OF INSTRUCTION ; 7343 MEM READ, ;WAIT FOR PREFETCH TO GET INTO THE CACHE. ; 7344 ; MAY PAGE FAIL BUT THAT IS OK ; 7345 START READ, ;START FETCH ; 7346 VMA PHYSICAL, ;ABSOLUTE ADDRESSING U 2170, 3366,0111,1103,4364,4007,0700,0200,0024,1016 ; 7347 J/TRP1 ;JOIN COMMON CODE ; 7348 ; 7349 [AR]_[AR]+[EBR], ;WE COME HERE IN EXEC MODE ; 7350 MEM READ, ;WAIT FOR PREFETCH TO GET INTO THE CACHE. ; 7351 ; MAY PAGE FAIL BUT THAT IS OK ; 7352 START READ, ;START FETCH ; 7353 VMA PHYSICAL, ;ABSOLUTE ADDRESSING U 2171, 3366,0111,1003,4364,4007,0700,0200,0024,1016 ; 7354 J/TRP1 ;JOIN COMMON CODE ; 7355 ; 7356 TRP1: MEM READ, [HR]_MEM, ;PLACE INSTRUCTION IN HR U 3366, 3367,3771,0002,4365,5617,0700,0200,0000,0002 ; 7357 LOAD INST ;LOAD IR, XR, @ ; 7358 [HR].AND.#, ;TEST TO SEE IF THIS ; 7359 #/700000, 3T, ; IS A UUO U 3367, 2174,4553,0200,4374,4007,0321,0000,0070,0000 ; 7360 SKIP ADL.EQ.0 ; 7361 =0 CHANGE FLAGS, ;NOT A UUO ; 7362 HOLD USER/1, ;CLEAR TRAP FLAGS U 2174, 2564,4443,0000,4174,4467,0700,0000,0001,0000 ; 7363 J/XCT1 ;DO THE INSTRUCTION U 2175, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 7364 UUO ;DO THE UUO ; 7365 ; 7366 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 169 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 IO -- INTERNAL DEVICES ; 7367 .TOC "IO -- INTERNAL DEVICES" ; 7368 ; 7369 .DCODE D 0700, 1200,1700,4100 ; 7370 700: IOT,AC DISP, J/GRP700 D 0701, 1200,1720,4100 ; 7371 IOT,AC DISP, J/GRP701 ; 7372 .UCODE ; 7373 U 1701, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 7374 1701: UUO ;DATAI APR, U 1702, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 7375 1702: UUO ;BLKO APR, U 1703, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 7376 1703: UUO ;DATAO APR, U 1706, 3372,3771,0005,4304,4007,0701,0000,0000,0000 ; 7377 1706: [BR]_APR, J/APRSZ ;CONSZ APR, U 1707, 3370,3771,0005,4304,4007,0701,0000,0000,0000 ; 7378 1707: [BR]_APR, J/APRSO ;CONSO APR, ; 7379 1710: U 1710, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 7380 RDERA: UUO ;BLKI PI, U 1711, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 7381 1711: UUO ;DATAI PI, U 1712, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 7382 1712: UUO ;BLKO PI, U 1713, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 7383 1713: UUO ;DATAO PI, U 1716, 3373,3441,1405,4174,4007,0700,0000,0000,0000 ; 7384 1716: [BR]_[PI], J/CONSZ ;CONSZ PI, U 1717, 3371,3441,1405,4174,4007,0700,0000,0000,0000 ; 7385 1717: [BR]_[PI], J/CONSO ;CONSO PI, ; 7386 ; 7387 .IFNOT/ITS ; 7388 1720: ; 7389 GRP701: UUO ;BLKI PAG, ; 7390 .ENDIF/ITS U 1726, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 7391 1726: UUO ;CONSZ PAG, U 1727, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 7392 1727: UUO ;CONSO PAG, ; 7393 ; 7394 ;680I AND CACHE SWEEP STUFF U 1730, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 7395 1730: UUO ;BLKI ; 7396 .IF/PCST U 1731, 3476,3771,0005,7274,4007,0701,0000,0000,0233 ; 7397 1731: [BR]_WORK[PCST], J/RTNREG ;Read PC sample table pointer ; 7398 .IFNOT/PCST ; 7399 1731: UUO ;DATAI ; 7400 .ENDIF/PCST U 1732, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 7401 1732: UUO ;BLKO ; 7402 .IF/PCST U 1733, 3374,3443,0300,4174,4007,0700,0200,0004,0012 ; 7403 1733: VMA_[AR], START READ, J/WRPCST ;Write PC sample table pointer ; 7404 .IFNOT/PCST ; 7405 1733: UUO ;DATAO ; 7406 .ENDIF/PCST U 1734, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 7407 1734: UUO ;CONO U 1735, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 7408 1735: UUO ;CONI U 1736, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 7409 1736: UUO ;CONSZ U 1737, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 7410 1737: UUO ;CONSO ; 7411 U 3370, 3371,4251,0505,4374,4007,0700,0000,0000,7770 ; 7412 APRSO: [BR]_[BR].AND.# CLR LH, #/7770 U 3371, 0014,4113,0305,4174,4007,0330,0000,0000,0000 ; 7413 CONSO: [BR].AND.[AR], SKIP ADR.EQ.0, J/SKIP ; 7414 U 3372, 3373,4251,0505,4374,4007,0700,0000,0000,7770 ; 7415 APRSZ: [BR]_[BR].AND.# CLR LH, #/7770 U 3373, 1400,4113,0305,4174,4007,0330,0000,0000,0000 ; 7416 CONSZ: [BR].AND.[AR], SKIP ADR.EQ.0, J/DONE ; 7417 ; 7418 .IF/PCST U 3374, 3375,3771,0005,4365,5007,0700,0200,0000,0002 ; 7419 WRPCST: MEM READ, [BR]_MEM U 3375, 1400,3333,0005,7174,4007,0700,0400,0000,0233 ; 7420 WORK[PCST]_[BR], J/DONE ; 7421 .ENDIF/PCST ; 7422 ; 7423 1700: ; 7424 GRP700: ; 7425 APRID: [BR]_#, ; 7426 HARDWARE OPTIONS/HWOPT, U 1700, 0137,3771,0005,4374,4007,0700,0000,0000,3301 ; 7427 HARDWARE SERIAL NUMBER/HWSER ; 7428 137: [BR]_#, ; 7429 MICROCODE OPTIONS/OPT, ; 7430 MICROCODE VERSION/UCV, ; 7431 HOLD RIGHT, U 0137, 3476,3771,0005,4374,0007,0700,0000,0002,0406 ; 7432 J/RTNREG ; 7433 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 170 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 IO -- INTERNAL DEVICES ; 7434 ; 7435 1704: U 1704, 3376,3771,0005,7274,4007,0701,0000,0000,0230 ; 7436 WRAPR: [BR]_WORK[APR] ; 7437 [BR]_[BR].AND.NOT.#, ;CLEAR THE OLD PIA U 3376, 3377,5551,0505,4370,4007,0700,0000,0000,0007 ; 7438 #/7, HOLD LEFT ; .. U 3377, 3400,4551,0304,4374,4007,0700,0000,0000,0007 ; 7439 [ARX]_[AR].AND.#, #/7 ;PUT NEW PIA IN ARX U 3400, 3401,3111,0405,4174,4007,0700,0000,0000,0000 ; 7440 [BR]_[BR].OR.[ARX] ;PUT NEW PIA IN BR ; 7441 [ARX]_[AR].AND.#, ;MASK THE DATA BITS U 3401, 3402,4551,0304,4374,4007,0700,0000,0000,7760 ; 7442 #/007760 ; DOWN TO ENABLES U 3402, 2200,4553,0300,4374,4007,0331,0000,0010,0000 ; 7443 TR [AR], #/100000 ;WANT TO ENABLE ANY? U 2200, 2201,3111,0405,4174,4007,0700,0000,0000,0000 ; 7444 =0 [BR]_[BR].OR.[ARX] ;YES--SET THEM U 2201, 2202,4553,0300,4374,4007,0331,0000,0004,0000 ; 7445 TR [AR], #/40000 ;WANT TO DISABLE ANY? U 2202, 2203,5111,0405,4174,4007,0700,0000,0000,0000 ; 7446 =0 [BR]_[BR].AND.NOT.[ARX] ;YES--CLEAR THEM U 2203, 3403,3771,0006,4304,4007,0701,0000,0000,0000 ; 7447 [BRX]_APR ;GET CURRENT STATUS U 3403, 2204,4553,0300,4374,4007,0331,0000,0002,0000 ; 7448 TR [AR], #/20000 ;WANT TO CLEAR FLAGS? U 2204, 2205,5111,0406,4174,4007,0700,0000,0000,0000 ; 7449 =0 [BRX]_[BRX].AND.NOT.[ARX] ;YES--CLEAR BITS U 2205, 2206,4553,0300,4374,4007,0331,0000,0001,0000 ; 7450 TR [AR], #/10000 ;WANT TO SET ANY FLAGS? U 2206, 2207,3111,0406,4174,4007,0700,0000,0000,0000 ; 7451 =0 [BRX]_[BRX].OR.[ARX] ;YES--SET FLAGS U 2207, 2210,4553,0300,4374,4007,0331,0000,0003,0000 ; 7452 TR [AR], #/30000 ;ANY CHANGE AT ALL? ; 7453 =0 READ [BRX], ;YES--LOAD NEW FLAGS U 2210, 3406,3333,0006,4174,4007,0700,0000,0000,0000 ; 7454 J/WRAPR2 ;TURN OFF INTERRUPT 8080 U 2211, 3404,3333,0005,4174,4007,0700,0000,0000,0000 ; 7455 WRAPR1: READ [BR] ;FIX DPM TIMING BUG ; 7456 READ [BR], ;ENABLE CONDITIONS U 3404, 3405,3333,0005,4174,4257,0700,0000,0000,0000 ; 7457 SET APR ENABLES ; 7458 WORK[APR]_[BR], ;SAVE FOR RDAPR U 3405, 1400,3333,0005,7174,4007,0700,0400,0000,0230 ; 7459 J/DONE ;ALL DONE ; 7460 ; 7461 WRAPR2: READ [BRX], ;LOAD NEW FLAGS U 3406, 3407,3333,0006,4174,4237,0700,0000,0000,0000 ; 7462 SPEC/APR FLAGS ; .. ; 7463 [BRX]_[BRX].AND.NOT.#, ;CLEAR INTERRUPT THE 8080 U 3407, 3410,5551,0606,4370,4007,0700,0000,0000,2000 ; 7464 #/002000, HOLD LEFT ; FLAG ; 7465 READ [BRX], ;LOAD NEW FLAGS ; 7466 SPEC/APR FLAGS, ; .. U 3410, 2211,3333,0006,4174,4237,0700,0000,0000,0000 ; 7467 J/WRAPR1 ;LOOP BACK ; 7468 ; 7469 1705: U 1705, 3411,3771,0005,7274,4007,0701,0000,0000,0230 ; 7470 RDAPR: [BR]_WORK[APR] ; 7471 [BR]_[BR] SWAP, ;PUT ENABLES IN BOTH U 3411, 3412,3770,0505,4344,0007,0700,0000,0000,0000 ; 7472 HOLD RIGHT ; HALVES ; 7473 [BR]_[BR].AND.#, ;SAVE ENABLES IN LH ; 7474 #/7760, ; U 3412, 3413,4551,0505,4374,0007,0700,0000,0000,7760 ; 7475 HOLD RIGHT ; 7476 [BR]_[BR].AND.#, ;SAVE PIA IN RH ; 7477 #/7, U 3413, 3414,4551,0505,4370,4007,0700,0000,0000,0007 ; 7478 HOLD LEFT U 3414, 3415,3771,0004,4304,4007,0701,0000,0000,0000 ; 7479 [ARX]_APR ;READ THE APR FLAGS ; 7480 [ARX]_[ARX].AND.# CLR LH, ;MASK OUT JUNK U 3415, 3416,4251,0404,4374,4007,0700,0000,0000,7770 ; 7481 #/007770 ;KEEP 8 FLAGS ; 7482 [BR]_[BR].OR.[ARX], ;MASH THE STUFF TOGETHER U 3416, 3476,3111,0405,4174,4007,0700,0000,0000,0000 ; 7483 J/RTNREG ;RETURN ; 7484 ; 7485 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 171 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 IO -- INTERNAL DEVICES -- EBR & UBR ; 7486 .TOC "IO -- INTERNAL DEVICES -- EBR & UBR" ; 7487 ; 7488 .IF/ITS ; 7489 1723: U 1723, 3417,3443,0300,4174,4007,0700,0200,0004,0012 ; 7490 WRUBR: VMA_[AR], START READ ; 7491 MEM READ, [AR]_MEM, U 3417, 2212,3771,0003,4365,5007,0521,0200,0000,0002 ; 7492 3T, SKIP DP0 ; Load AC blocks? ; 7493 =0 [AR]_[AR].AND.#, ; No: Clear those bits in argument. ; 7494 #/100003, ; 7495 HOLD RIGHT, U 2212, 3420,4551,0303,4374,0007,0700,0000,0010,0003 ; 7496 J/WRUBR1 ; 7497 [UBR]_[UBR].AND.#, ; Yes: Clear those bits in UBR. ; 7498 #/100003, U 2213, 3420,4551,1111,4374,0007,0700,0000,0010,0003 ; 7499 HOLD RIGHT U 3420, 2214,4553,0300,4374,4007,0321,0000,0010,0000 ; 7500 WRUBR1: TL [AR], #/100000 ; Set base address? ; 7501 =0 [UBR]_[UBR].AND.# CLR RH, ; Yes: Clear those bits in UBR. ; 7502 #/407700, U 2214, 3421,4521,1111,4374,4007,0700,0000,0040,7700 ; 7503 J/WRUBR2 ; 7504 [AR]_[AR].AND.# CLR RH, ; No: Clear those bits in argument. U 2215, 3421,4521,0303,4374,4007,0700,0000,0040,7700 ; 7505 #/407700 ; 7506 WRUBR2: [UBR]_[UBR].OR.[AR], ; Put it all together ; 7507 LOAD AC BLOCKS, ; and tell the hardware. U 3421, 2276,3111,0311,4174,4477,0700,0000,0000,0000 ; 7508 J/SWEEP ; 7509 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 172 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 IO -- INTERNAL DEVICES -- EBR & UBR ; 7510 ; 7511 .IFNOT/ITS ; 7512 1723: ; 7513 WRUBR: VMA_[AR], ;LOAD E INTO VMA ; 7514 START READ ;START MEMORY ; 7515 MEM READ, ;WAIT FOR DATA ; 7516 [AR]_MEM, 3T, ;PUT IT INTO THE AR ; 7517 SKIP DP0 ;SEE IF WE WANT TO LOAD ; 7518 ; AC BLOCK NUMBERS ; 7519 =0 [AR]_[AR].AND.#, ;NO--CLEAR JUNK IN AR ; 7520 #/100000, ; LEAVE ONLY LOAD UBR ; 7521 HOLD RIGHT, ; IN LEFT HALF ; 7522 SKIP ADL.EQ.0, 3T, ;SEE IF WE WANT TO LOAD ; 7523 J/ACBSET ;SKIP AROUND UBR LOAD ; 7524 [UBR]_[UBR].AND.#, ;MASK OUT THE OLD ; 7525 #/770077, ; AC BLOCK NUMBERS ; 7526 HOLD RIGHT ;IN THE LEFT HALF ; 7527 [AR].AND.#, ;SEE IF WE WANT TO LOAD ; 7528 #/100000, 3T, ; UBR ALSO ; 7529 SKIP ADL.EQ.0 ; 7530 =0 ; 7531 ACBSET: [BR]_[AR].AND.#, ;COPY UBR PAGE NUMBER ; 7532 #/17777, ; INTO BR ; 7533 J/SETUBR ;GO LOAD UBR ; 7534 [UBR]_[UBR].OR.[AR], ;DO NOT LOAD UBR ; 7535 ; PUT AC BLOCK # IN ; 7536 HOLD RIGHT, ; THE LEFT HALF ; 7537 LOAD AC BLOCKS, ;LOAD HARDWARE ; 7538 J/DONE ;ALL DONE ; 7539 ; 7540 SETUBR: [BR]_0, ;CLEAR BR LEFT ; 7541 SC_7, ;PUT THE COUNT IN SC ; 7542 HOLD RIGHT ; 7543 =0 ; 7544 STUBRS: [BR]_[BR]*2, ;SHIFT BR OVER ; 7545 STEP SC, ; 9 PLACES ; 7546 J/STUBRS ; 7547 [UBR]_[UBR].AND.#, ;MASK OUT OLD UBR ; 7548 #/777774, ; BITS IN ; 7549 HOLD RIGHT ; LEFT HALF ; 7550 [UBR]_0, ;CLEAR RIGHT HALF ; 7551 HOLD LEFT ; 7552 [UBR]_[UBR].OR.[BR] ;PUT IN PAGE TABLE ADDRESS ; 7553 [UBR]_[UBR].OR.[AR], ;PUT IN AC BLOCK # ; 7554 HOLD RIGHT, ; IN LEFT HALF ; 7555 LOAD AC BLOCKS, ;TELL HARDWARE ; 7556 J/SWEEP ;CLEAR CACHE ; 7557 .ENDIF/ITS ; 7558 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 173 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 IO -- INTERNAL DEVICES -- EBR & UBR ; 7559 ; 7560 1724: U 1724, 2216,3445,0303,4174,4007,0700,2000,0071,0006 ; 7561 WREBR: [AR]_[AR]*2, SC_6 ; 7562 =0 U 2216, 2216,3445,0303,4174,4007,0630,2000,0060,0000 ; 7563 WREBR1: [AR]_[AR]*2, STEP SC, J/WREBR1 ; 7564 .IF/FULL ;DO NOT ENABLE PAGING IN SMALL ; 7565 ; MICROCODE. U 2217, 3422,3771,0005,7274,4007,0701,0000,0000,0230 ; 7566 [BR]_WORK[APR] U 3422, 3423,4551,0505,4370,4007,0700,0000,0074,7777 ; 7567 [BR]_[BR].AND.#, #/747777, HOLD LEFT U 3423, 2220,4553,0300,4374,4007,0321,0000,0000,0020 ; 7568 [AR].AND.#, #/20, 3T, SKIP ADL.EQ.0 U 2220, 2221,3551,0505,4370,4007,0700,0000,0003,0000 ; 7569 =0 [BR]_[BR].OR.#, #/030000, HOLD LEFT U 2221, 3424,3333,0005,4174,4257,0700,0000,0000,0000 ; 7570 READ [BR], SET APR ENABLES U 3424, 3425,3333,0005,7174,4007,0700,0400,0000,0230 ; 7571 WORK[APR]_[BR] ; 7572 .ENDIF/FULL U 3425, 3426,3441,0310,4174,4007,0700,0000,0000,0000 ; 7573 [EBR]_[AR] U 3426, 2222,4553,1000,4374,4007,0321,0000,0000,0040 ; 7574 [EBR].AND.#, #/40, 3T, SKIP ADL.EQ.0 U 2222, 2276,3551,1010,4374,0007,0700,0000,0040,0000 ; 7575 =0 [EBR]_[EBR].OR.#, #/400000, HOLD RIGHT, J/SWEEP U 2223, 2276,5551,1010,4374,0007,0700,0000,0040,0000 ; 7576 [EBR]_[EBR].AND.NOT.#, #/400000, HOLD RIGHT, J/SWEEP ; 7577 ; 7578 1725: U 1725, 2224,3447,1005,4174,4007,0700,2000,0071,0006 ; 7579 RDEBR: [BR]_[EBR]*.5, SC_6 ; 7580 =0 U 2224, 2224,3447,0505,4174,4007,0630,2000,0060,0000 ; 7581 RDEBR1: [BR]_[BR]*.5, STEP SC, J/RDEBR1 U 2225, 3427,4551,0505,4374,4007,0700,0000,0006,3777 ; 7582 [BR]_[BR].AND.#, #/63777 ;MASK TO JUST EBR ; 7583 [BR]_0, ;CLEAR LEFT HALF ; 7584 HOLD RIGHT, ; BITS U 3427, 3476,4221,0005,4174,0007,0700,0000,0000,0000 ; 7585 J/RTNREG ;RETURN ANSWER ; 7586 ; 7587 .IF/ITS ; 7588 1721: U 1721, 3430,3441,1105,4174,4007,0700,0000,0000,0000 ; 7589 RDUBR: [BR]_[UBR] ; 7590 [BR]_[BR].AND.#, ; 7591 #/507703, ; 7592 HOLD RIGHT, U 3430, 3476,4551,0505,4374,0007,0700,0000,0050,7703 ; 7593 J/RTNREG ; 7594 U 3431, 3432,3441,1105,4174,4007,0700,0000,0000,0000 ; 7595 GETPCW: [BR]_[UBR] ; 7596 [BR]_[BR].AND.#, ; 7597 #/507703, ; 7598 HOLD RIGHT, U 3432, 0001,4551,0505,4374,0004,1700,0000,0050,7703 ; 7599 RETURN [1] ; 7600 ; 7601 .IFNOT/ITS ; 7602 1721: ; 7603 RDUBR: [BR]_[UBR] ; 7604 =0 [BRX]_[BR]*.5, SC_6, CALL [GTPCW1] ; 7605 [BR]_[BR].AND.#, ;JUST RETURN USEFUL ; 7606 #/507700, HOLD RIGHT, ; BITS ; 7607 J/RTNREG ; 7608 ; 7609 ; 7610 GETPCW: [BR]_[UBR] ; 7611 [BRX]_[BR]*.5, SC_6 ; 7612 =0 ; 7613 GTPCW1: [BRX]_[BRX]*.5, STEP SC, J/GTPCW1 ; 7614 [BRX]_[BRX].AND.#, #/17777 ; 7615 [BR]_[BRX], HOLD LEFT, RETURN [1] ; 7616 .ENDIF/ITS ; 7617 ; 7618 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 174 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 IO -- INTERNAL DEVICES -- KL PAGING REGISTERS ; 7619 .TOC "IO -- INTERNAL DEVICES -- KL PAGING REGISTERS" ; 7620 ; 7621 .DCODE D 0702, 1216,1760,4700 ; 7622 702: IOT,AC DISP, M, J/GRP702 ; 7623 .UCODE ; 7624 ; 7625 .IF/ITS ; 7626 1760: ; 7627 GRP702: U 1760, 3476,3771,0005,7274,4007,0701,0000,0000,0215 ; 7628 SDBR1: [BR]_WORK[DBR1], J/RTNREG ; 7629 1761: U 1761, 3476,3771,0005,7274,4007,0701,0000,0000,0216 ; 7630 SDBR2: [BR]_WORK[DBR2], J/RTNREG ; 7631 1762: U 1762, 3476,3771,0005,7274,4007,0701,0000,0000,0217 ; 7632 SDBR3: [BR]_WORK[DBR3], J/RTNREG ; 7633 1763: U 1763, 3476,3771,0005,7274,4007,0701,0000,0000,0220 ; 7634 SDBR4: [BR]_WORK[DBR4], J/RTNREG ; 7635 .IFNOT/ITS ; 7636 1760: ; 7637 GRP702: ; 7638 RDSPB: [BR]_WORK[SBR], J/RTNREG ; 7639 1761: ; 7640 RDCSB: [BR]_WORK[CBR], J/RTNREG ; 7641 1762: ; 7642 RDPUR: [BR]_WORK[PUR], J/RTNREG ; 7643 1763: ; 7644 RDCSTM: [BR]_WORK[CSTM], J/RTNREG ; 7645 .ENDIF/ITS ; 7646 ; 7647 1766: U 1766, 3476,3771,0005,7274,4007,0701,0000,0000,0227 ; 7648 RDHSB: [BR]_WORK[HSBADR], J/RTNREG ; 7649 ; 7650 .IFNOT/ITS ; 7651 1767: UUO ; 7652 .IF/ITS ; 7653 1767: U 1767, 3433,3771,0004,7274,4007,0701,0000,0000,0215 ; 7654 SPM: [ARX]_WORK[DBR1] U 3433, 3434,3443,0300,4174,4007,0700,0200,0003,0012 ; 7655 VMA_[AR], START WRITE U 3434, 2226,3333,0004,4175,5007,0701,0200,0000,0002 ; 7656 MEM WRITE, MEM_[ARX] U 2226, 3435,3771,0004,7274,4007,0701,0010,0000,0216 ; 7657 =0 [ARX]_WORK[DBR2], CALL [SPM-NEXT] U 2227, 2230,3333,0004,4175,5007,0701,0200,0000,0002 ; 7658 MEM WRITE, MEM_[ARX] U 2230, 3435,3771,0004,7274,4007,0701,0010,0000,0304 ; 7659 =0 [ARX]_WORK[QUAN], CALL [SPM-NEXT] ; 7660 .IFNOT/JPC U 2231, 1400,3333,0004,4175,5007,0701,0200,0000,0002 ; 7661 MEM WRITE, MEM_[ARX], J/DONE ; 7662 .IF/JPC ; 7663 MEM WRITE, MEM_[ARX] ; 7664 =0 [ARX]_WORK[U.JPC], CALL [SPM-NEXT] ; 7665 MEM WRITE, MEM_[ARX] ; 7666 =0 [ARX]_WORK[E.JPC], CALL [SPM-NEXT] ; 7667 MEM WRITE, MEM_[ARX], J/DONE ; 7668 .ENDIF/JPC ; 7669 = ; 7670 ; 7671 SPM-NEXT: U 3435, 0001,0111,0703,4170,4004,1700,0200,0003,0012 ; 7672 [AR]_[AR]+1, LOAD VMA, HOLD LEFT, START WRITE, RETURN [1] ; 7673 ; 7674 .ENDIF/ITS ; 7675 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 175 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 IO -- INTERNAL DEVICES -- KL PAGING REGISTERS ; 7676 ; 7677 .IF/ITS ; 7678 ;;; These guys could be careful and only sweep half of the page table (but all ; 7679 ;;; of the cache). ; 7680 1770: U 1770, 2276,3333,0003,7174,4007,0700,0400,0000,0215 ; 7681 LDBR1: WORK[DBR1]_[AR], J/SWEEP ; 7682 1771: U 1771, 2276,3333,0003,7174,4007,0700,0400,0000,0216 ; 7683 LDBR2: WORK[DBR2]_[AR], J/SWEEP ; 7684 1772: U 1772, 2276,3333,0003,7174,4007,0700,0400,0000,0217 ; 7685 LDBR3: WORK[DBR3]_[AR], J/SWEEP ; 7686 1773: U 1773, 2276,3333,0003,7174,4007,0700,0400,0000,0220 ; 7687 LDBR4: WORK[DBR4]_[AR], J/SWEEP ; 7688 .IFNOT/ITS ; 7689 1770: ; 7690 WRSPB: START READ ; 7691 MEM READ, [AR]_MEM ; 7692 WORK[SBR]_[AR], J/DONE ; 7693 1771: ; 7694 WRCSB: START READ ; 7695 MEM READ, [AR]_MEM ; 7696 WORK[CBR]_[AR], J/DONE ; 7697 1772: ; 7698 WRPUR: START READ ; 7699 MEM READ, [AR]_MEM ; 7700 WORK[PUR]_[AR], J/DONE ; 7701 1773: ; 7702 WRCSTM: START READ ; 7703 MEM READ, [AR]_MEM ; 7704 WORK[CSTM]_[AR], J/DONE ; 7705 .ENDIF/ITS ; 7706 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 176 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 IO -- INTERNAL DEVICES -- KL PAGING REGISTERS ; 7707 ; 7708 1776: U 1776, 3436,4443,0000,4174,4007,0700,0200,0004,0002 ; 7709 WRHSB: START READ U 3436, 3437,3771,0003,4365,5007,0700,0200,0000,0002 ; 7710 MEM READ, [AR]_MEM U 3437, 1400,3333,0003,7174,4007,0700,0400,0000,0227 ; 7711 WORK[HSBADR]_[AR], J/DONE ; 7712 ; 7713 .IFNOT/ITS ; 7714 1777: UUO ; 7715 .IF/ITS ; 7716 1777: U 1777, 3440,4443,0000,4174,4007,0700,0200,0004,0002 ; 7717 LPMR: START READ U 3440, 3441,3771,0004,4365,5007,0700,0200,0000,0002 ; 7718 MEM READ, [ARX]_MEM U 3441, 2232,3333,0004,7174,4007,0700,0400,0000,0215 ; 7719 WORK[DBR1]_[ARX] ; 7720 =0 [AR]_[AR]+1, LOAD VMA, HOLD LEFT, START READ, U 2232, 3545,0111,0703,4170,4007,0700,0210,0004,0012 ; 7721 CALL [LOADARX] U 2233, 2234,3333,0004,7174,4007,0700,0400,0000,0216 ; 7722 WORK[DBR2]_[ARX] ; 7723 =0 [AR]_[AR]+1, LOAD VMA, HOLD LEFT, START READ, U 2234, 3545,0111,0703,4170,4007,0700,0210,0004,0012 ; 7724 CALL [LOADARX] ; 7725 .IFNOT/JPC U 2235, 2276,3333,0004,7174,4007,0700,0400,0000,0304 ; 7726 WORK[QUAN]_[ARX], J/SWEEP ; 7727 .IF/JPC ; 7728 WORK[QUAN]_[ARX] ; 7729 =0 [AR]_[AR]+1, LOAD VMA, HOLD LEFT, START READ, ; 7730 CALL [LOADARX] ; 7731 WORK[U.JPC]_[ARX] ; 7732 =0 [AR]_[AR]+1, LOAD VMA, HOLD LEFT, START READ, ; 7733 CALL [LOADARX] ; 7734 WORK[E.JPC]_[ARX], J/SWEEP ; 7735 .ENDIF/JPC ; 7736 = ; 7737 .ENDIF/ITS ; 7738 ; 7739 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 177 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 IO -- INTERNAL DEVICES -- TIMER CONTROL ; 7740 .TOC "IO -- INTERNAL DEVICES -- TIMER CONTROL" ; 7741 ; 7742 TICK: [AR]_WORK[TIME1], ;[123] GET LOW WORD U 3442, 3443,3771,0003,7274,4117,0701,0000,0000,0301 ; 7743 SPEC/CLRCLK ;[123] CLEAR CLOCK FLAG U 3443, 3444,4751,1205,4374,4007,0700,0000,0001,0000 ; 7744 TOCK: [BR]_0 XWD [10000] ;2^12 UNITS PER MS U 3444, 3445,0111,0503,4174,4007,0700,0000,0000,0000 ; 7745 [AR]_[AR]+[BR] ;INCREMENT THE TIMER U 3445, 2236,3770,0303,4174,0007,0520,0000,0000,0000 ; 7746 FIX [AR] SIGN, SKIP DP0 ;SEE IF IT OVERFLOWED ; 7747 =0 ; 7748 TOCK1: WORK[TIME1]_[AR], ;STORE THE NEW TIME U 2236, 3446,3333,0003,7174,4007,0700,0400,0000,0301 ; 7749 J/TOCK2 ;SKIP OVER THE OVERFLOW CODE U 2237, 2120,3771,0003,7274,4007,0701,0000,0000,0300 ; 7750 [AR]_WORK[TIME0] ;GET HIGH WORD ; 7751 =0* [AR]_[AR]+1, ;BUMP IT U 2120, 3455,0111,0703,4174,4007,0700,0010,0000,0000 ; 7752 CALL [WRTIM1] ;STORE BACK IN RAM ; 7753 [AR]_0, ;CAUSE LOW WORD WORD U 2122, 2236,4221,0003,4174,4007,0700,0000,0000,0000 ; 7754 J/TOCK1 ; TO GET STORED ; 7755 ; 7756 .IF/ITS ; 7757 TOCK2: TR [PI], PI.IP1/1, ;PI in progress? ; 7758 PI.IP2/1, PI.IP3/1, ; 7759 PI.IP4/1, PI.IP5/1, U 3446, 2240,4553,1400,4374,4007,0331,0000,0007,7400 ; 7760 PI.IP6/1, PI.IP7/1 ; 7761 =0 ; 7762 TOCK3: [AR]_WORK[TTG], ;Yes: Skip quantum counter. U 2240, 3450,3771,0003,7274,4007,0701,0000,0000,0303 ; 7763 J/TOCK4 U 2241, 3447,0551,0503,7274,4007,0701,0000,0000,0304 ; 7764 [AR]_[BR]+WORK[QUAN] ;No: Increment quantum counter. ; 7765 = WORK[QUAN]_[AR], U 3447, 2240,3333,0003,7174,4007,0700,0400,0000,0304 ; 7766 J/TOCK3 ; 7767 ; 7768 TOCK4: [AR]_[AR]-[BR], ;COUNT DOWN TIME TO GO U 3450, 2242,1111,0503,4174,4007,0421,4000,0000,0000 ; 7769 SKIP AD.LE.0 ;SEE IF IT TIMED OUT ; 7770 =0 ; 7771 TOCK5: WORK[TTG]_[AR], ;SAVE NEW TIME TO GO U 2242, 0002,3333,0003,7174,4004,1700,0400,0000,0303 ; 7772 RETURN [2] ;ALL DONE U 2243, 3451,0551,0303,7274,4007,0701,0000,0000,0302 ; 7773 [AR]_[AR]+WORK[PERIOD] ;WHY THROW AWAY ALL THAT ACCURACY? ; 7774 .IFNOT/ITS ; 7775 TOCK2: [AR]_WORK[TTG] ; 7776 [AR]_[AR]-[BR], ;COUNT DOWN TIME TO GO ; 7777 SKIP AD.LE.0 ;SEE IF IT TIMED OUT ; 7778 =0 ; 7779 TOCK5: WORK[TTG]_[AR], ;SAVE NEW TIME TO GO ; 7780 RETURN [2] ;ALL DONE ; 7781 [AR]_WORK[PERIOD] ; 7782 .ENDIF/ITS U 3451, 3452,3771,0005,4304,4007,0701,0000,0000,0000 ; 7783 [BR]_APR ;GET CURRENT FLAGS U 3452, 3453,3551,0505,4374,4007,0700,0000,0000,0040 ; 7784 [BR]_[BR].OR.#, #/40 ;SET TIMER INTERRUPT FLAG ; 7785 READ [BR], ;PLACE ON DP AND ; 7786 SPEC/APR FLAGS, ; LOAD INTO HARDWARE U 3453, 2242,3333,0005,4174,4237,0700,0000,0000,0000 ; 7787 J/TOCK5 ;ALL DONE ; 7788 ; 7789 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 178 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 IO -- INTERNAL DEVICES -- WRTIME & RDTIME ; 7790 .TOC "IO -- INTERNAL DEVICES -- WRTIME & RDTIME" ; 7791 ; 7792 1774: U 1774, 3454,4443,0000,4174,4007,0700,0200,0004,0002 ; 7793 WRTIME: START READ ;FETCH WORD AT E ; 7794 MEM READ, ;WAIT FOR DATA U 3454, 2244,3771,0003,4365,5007,0700,0200,0000,0002 ; 7795 [AR]_MEM ;PUT WORD IN AR ; 7796 =00 VMA_[HR]+1, ;BUMP E ; 7797 START READ, ;START MEMORY U 2244, 3545,0111,0702,4170,4007,0700,0210,0004,0012 ; 7798 CALL [LOADARX] ;PUT DATA IN ARX ; 7799 [ARX]_[ARX].AND.#, ;CLEAR PART HELD IN ; 7800 #/770000, ; HARDWARE COUNTER U 2245, 3455,4551,0404,4370,4007,0700,0010,0077,0000 ; 7801 HOLD LEFT, CALL [WRTIM1] ; 7802 =11 WORK[TIME1]_[ARX], ;IN WORK SPACE U 2247, 1400,3333,0004,7174,4007,0700,0400,0000,0301 ; 7803 J/DONE ;NEXT INSTRUCTION ; 7804 = ; 7805 WRTIM1: WORK[TIME0]_[AR], ;SAVE THE NEW VALUE U 3455, 0002,3333,0003,7174,4004,1700,0400,0000,0300 ; 7806 RETURN [2] ; 7807 ; 7808 1764: U 1764, 3456,4451,1205,4324,4007,0700,0000,0000,0000 ; 7809 RDTIME: [BR]_TIME ;READ THE TIME U 3456, 3457,4451,1204,4324,4007,0700,0000,0000,0000 ; 7810 [ARX]_TIME ; AGAIN U 3457, 3460,4451,1206,4324,4007,0700,0000,0000,0000 ; 7811 [BRX]_TIME ; AGAIN ; 7812 [BR].XOR.[ARX], ;SEE IF STABLE U 3460, 2250,6113,0405,4174,4007,0621,0000,0000,0000 ; 7813 SKIP AD.EQ.0 ; .. U 2250, 2251,3441,0604,4174,4007,0700,0000,0000,0000 ; 7814 =0 [ARX]_[BRX] ;NO THEN NEXT TRY MUST BE OK U 2251, 3461,3771,0005,7274,4007,0701,0000,0000,0300 ; 7815 [BR]_WORK[TIME0] ; 7816 [ARX]_[ARX]+WORK[TIME1], ;COMBINE PARTS U 3461, 2254,0551,0404,7274,4007,0671,0000,0000,0301 ; 7817 SKIP/-1 MS ;SEE IF OVERFLOW HAPPENED ; 7818 =00 SPEC/CLRCLK, ;CLEAR CLOCK FLAG ; 7819 [AR]_WORK[TIME1], 2T, ;GET LOW WORD FOR TOCK U 2254, 3443,3771,0003,7274,4117,0700,0010,0000,0301 ; 7820 CALL [TOCK] ;UPDATE CLOCKS ; 7821 READ [HR], LOAD VMA, ;DID NOT OVERFLOW U 2255, 3462,3333,0002,4174,4007,0700,0200,0003,0012 ; 7822 START WRITE, J/RDTIM1 ;STORE ANSWER U 2256, 1764,4443,0000,4174,4007,0700,0000,0000,0000 ; 7823 J/RDTIME ;TRY AGAIN ; 7824 = U 3462, 3463,3333,0005,4175,5007,0701,0200,0000,0002 ; 7825 RDTIM1: MEM WRITE, MEM_[BR] U 3463, 3464,0111,0702,4170,4007,0700,0200,0003,0012 ; 7826 VMA_[HR]+1, LOAD VMA, START WRITE U 3464, 1400,3333,0004,4175,5007,0701,0200,0000,0002 ; 7827 MEM WRITE, MEM_[ARX], J/DONE ; 7828 ; 7829 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 179 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 IO -- INTERNAL DEVICES -- WRINT & RDINT ; 7830 .TOC "IO -- INTERNAL DEVICES -- WRINT & RDINT" ; 7831 ; 7832 ; 7833 1775: U 1775, 3465,4443,0000,4174,4007,0700,0200,0004,0002 ; 7834 WRINT: START READ U 3465, 3466,3771,0003,4365,5007,0700,0200,0000,0002 ; 7835 MEM READ, [AR]_MEM U 3466, 3467,3333,0003,7174,4007,0700,0400,0000,0302 ; 7836 WORK[PERIOD]_[AR] ; 7837 WORK[TTG]_[AR], U 3467, 1400,3333,0003,7174,4007,0700,0400,0000,0303 ; 7838 J/DONE ; 7839 ; 7840 1765: ; 7841 RDINT: [BR]_WORK[PERIOD], U 1765, 3476,3771,0005,7274,4007,0701,0000,0000,0302 ; 7842 J/RTNREG ; 7843 ; 7844 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 180 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 IO -- INTERNAL DEVICES -- RDPI & WRPI ; 7845 .TOC "IO -- INTERNAL DEVICES -- RDPI & WRPI" ; 7846 ; 7847 1715: U 1715, 3476,3441,1405,4174,4007,0700,0000,0000,0000 ; 7848 RDPI: [BR]_[PI], J/RTNREG ; 7849 ; 7850 1714: U 1714, 2252,4553,0300,4374,4007,0331,0000,0001,0000 ; 7851 WRPI: TR [AR], PI.CLR/1 U 2252, 2253,4221,0014,4174,4007,0700,0000,0000,0000 ; 7852 =0 [PI]_0 U 2253, 2260,4553,0300,4374,4007,0331,0000,0074,0000 ; 7853 TR [AR], PI.MBZ/17 ; 7854 U 2260, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 7855 =0 UUO U 2261, 3470,4551,0305,4374,4007,0700,0000,0000,0177 ; 7856 [BR]_[AR].AND.#,#/177 U 3470, 3471,3770,0505,4344,0007,0700,0000,0000,0000 ; 7857 [BR]_[BR] SWAP, HOLD RIGHT U 3471, 2262,4553,0300,4374,4007,0331,0000,0002,0000 ; 7858 TR [AR], PI.DIR/1 U 2262, 2263,5111,0514,4174,0007,0700,0000,0000,0000 ; 7859 =0 [PI]_[PI].AND.NOT.[BR], HOLD RIGHT U 2263, 2264,4553,0300,4374,4007,0331,0000,0000,4000 ; 7860 TR [AR], PI.REQ/1 U 2264, 2265,3111,0514,4174,0007,0700,0000,0000,0000 ; 7861 =0 [PI]_[PI].OR.[BR], HOLD RIGHT U 2265, 2266,4553,0300,4374,4007,0331,0000,0000,0200 ; 7862 TR [AR], PI.TSN/1 U 2266, 2267,3551,1414,4370,4007,0700,0000,0000,0200 ; 7863 =0 [PI]_[PI].OR.#,PI.ON/1, HOLD LEFT U 2267, 2270,4553,0300,4374,4007,0331,0000,0000,0400 ; 7864 TR [AR], PI.TSF/1 U 2270, 2271,5551,1414,4370,4007,0700,0000,0000,0200 ; 7865 =0 [PI]_[PI].AND.NOT.#,PI.ON/1, HOLD LEFT U 2271, 2272,4553,0300,4374,4007,0331,0000,0000,2000 ; 7866 TR [AR], PI.TCN/1 U 2272, 2273,3111,0514,4170,4007,0700,0000,0000,0000 ; 7867 =0 [PI]_[PI].OR.[BR], HOLD LEFT U 2273, 2300,4553,0300,4374,4007,0331,0000,0000,1000 ; 7868 TR [AR], PI.TCF/1 U 2300, 2301,5111,0514,4170,4007,0700,0000,0000,0000 ; 7869 =0**0 [PI]_[PI].AND.NOT.[BR], HOLD LEFT U 2301, 3473,3770,1416,4344,4007,0700,0010,0000,0000 ; 7870 PIEXIT: CALL LOAD PI ; 7871 =1**1 U 2311, 0070,3443,0100,4174,4156,4700,0200,0014,0012 ; 7872 DONE ; 7873 = ; 7874 ; 7875 ; 7876 ;SUBROUTINE TO LOAD PI HARDWARE ; 7877 ;CALL WITH: ; 7878 ; CALL LOAD PI ; 7879 ;RETURNS 10 WITH PI HARDWARE LOADED ; 7880 ; U 3472, 3473,3770,1416,4344,4007,0700,0000,0000,0000 ; 7881 LOADPI: [T0]_[PI] SWAP ;PUT ACTIVE CHANS IN LH U 3473, 3474,2441,0716,4170,4007,0700,4000,0000,0000 ; 7882 LDPI2: [T0]_-1, HOLD LEFT ;DONT MASK RH U 3474, 3475,4111,1416,4174,4007,0700,0000,0000,0000 ; 7883 [T0]_[T0].AND.[PI] ;ONLY REQUEST CHANS THAT ARE ON ; 7884 .NOT.[T0], LOAD PI, ;RELOAD HARDWARE U 3475, 0010,7443,1600,4174,4434,1700,0000,0000,0000 ; 7885 RETURN [10] ;RETURN TO CALLER ; 7886 ; 7887 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 181 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 IO -- INTERNAL DEVICES -- SUBROUTINES ; 7888 .TOC "IO -- INTERNAL DEVICES -- SUBROUTINES" ; 7889 ; 7890 ; 7891 ;HERE WITH SOMETHING IN BR STORE IT @AR U 3476, 3477,3443,0300,4174,4007,0700,0200,0003,0012 ; 7892 RTNREG: VMA_[AR], START WRITE U 3477, 1400,3333,0005,4175,5007,0701,0200,0000,0002 ; 7893 MEM WRITE, MEM_[BR], J/DONE ; 7894 ; 7895 ;CACHE SWEEP ; 7896 ; 7897 1722: ; 7898 CLRPT: VMA_[AR], ;PUT CORRECT ADDRESS IN VMA U 1722, 3500,3443,0300,4174,4147,0700,0200,0000,0010 ; 7899 LOAD PAGE TABLE ;GET SET TO WRITE PAGE TABLE U 3500, 1720,4221,0003,4174,4007,0700,0000,0000,0000 ; 7900 [AR]_0 ;CLEAR ENTRY ; 7901 .IF/ITS ; 7902 1720: ; 7903 GRP701: U 1720, 3501,3771,0003,4374,4007,0700,0000,0037,7377 ; 7904 CLRCSH: [AR]_#, #/377377 ;INITIAL VMA VALUE U 3501, 3502,4443,0000,4174,4007,0700,2000,0071,0375 ; 7905 SC_S#, S#/375 ;LOAD THE SC WITH NUMBER OF STEPS ; 7906 .IFNOT/ITS ; 7907 =0 [AR]_#,#/377377, ;INITIAL VMA VALUE ; 7908 CALL [SSWEEP] ;LOAD THE SC ; 7909 .ENDIF/ITS ; 7910 [BR]_#, #/1001, ;CONSTANT TO KEEP ADDING U 3502, 3503,3771,0005,4374,4247,0700,0000,0000,1001 ; 7911 CLRCSH ;START TO CLEAR CACHE U 3503, 2274,3333,0003,4174,4247,0700,0000,0000,1000 ; 7912 READ [AR], CLRCSH ;FIRST THING TO CLEAR ; 7913 =0 ; 7914 CLRPTL: [AR]_[AR]-[BR], ;UPDATE AR (AND PUT ON DP) ; 7915 CLRCSH, ;SWEEP ON NEXT STEP ; 7916 STEP SC, ;SKIP IF WE ARE DONE U 2274, 2274,1111,0503,4174,4247,0630,6000,0060,1000 ; 7917 J/CLRPTL ;LOOP FOR ALL ENTRIES ; 7918 .IFNOT/ITS ; 7919 READ [AR], J/ZAPPTA ;CLEAR LAST ENTRY ; 7920 .IF/ITS U 2275, 1400,3333,0003,4174,4007,0700,0000,0000,0000 ; 7921 READ [AR], J/DONE ;Clear last entry. ; 7922 .ENDIF/ITS ; 7923 ; 7924 =0 ; 7925 SWEEP: [AR]_#,#/377377, ;INITIAL VMA VALUE U 2276, 3505,3771,0003,4374,4007,0700,0010,0037,7377 ; 7926 CALL [SSWEEP] ;LOAD NUMBER OF STEPS INTO SC ; 7927 [BR]_#, #/1001, ;CONSTANT TO KEEP ADDING U 2277, 3504,3771,0005,4374,4347,0700,0000,0000,1001 ; 7928 SWEEP ;START SWEEP U 3504, 2302,3333,0003,4174,4347,0700,0000,0000,1000 ; 7929 READ [AR], SWEEP ;FIRST THING TO CLEAR ; 7930 =0 ; 7931 SWEEPL: [AR]_[AR]-[BR], ;UPDATE AR (AND PUT ON DP) ; 7932 SWEEP, ;SWEEP ON NEXT STEP ; 7933 STEP SC, ;SKIP IF WE ARE DONE U 2302, 2302,1111,0503,4174,4347,0630,6000,0060,1000 ; 7934 J/SWEEPL ;LOOP FOR ALL ENTRIES ; 7935 ;CLEAR LAST ENTRY AND ; 7936 .IF/ITS U 2303, 1400,4221,0003,4174,4007,0700,0000,0000,0000 ; 7937 [AR]_0, J/DONE ;Clear last entry. ; 7938 .IFNOT/ITS ; 7939 ZAPPTA: WORK[PTA.U]_0 ; FORGET PAGE TABLE ADDRESS ; 7940 WORK[PTA.E]_0, ;FORGET PAGE TABLE ADDRESS ; 7941 J/DONE ;ALL DONE ; 7942 .ENDIF/ITS ; 7943 ; 7944 SSWEEP: SC_S#, S#/375, ;NUMBER OF STEPS U 3505, 0001,4443,0000,4174,4004,1700,2000,0071,0375 ; 7945 RETURN [1] ;RETURN ; 7946 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 182 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 IO -- INTERNAL DEVICES -- SUBROUTINES ; 7947 ; 7948 ;WE COME HERE EITHER FROM NEXT INSTRUCTION DISPATCH OR PAGE FAIL ; 7949 ; LOGIC. IN ALL CASES, THE CURRENT INSTRUCTION IS CORRECTLY SETUP ; 7950 ; TO RESTART PROPERLY. ; 7951 ; 7952 ;FIRST SET THE CORRECT PI IN PROGRESS BIT ; 7953 ; [FLG]_[FLG].OR.#,FLG.PI/1, HOLD RIGHT, ; 7954 ; J/PI ;SET PI CYCLE AND PROCESS PI ; 7955 =1000 ; 7956 PI: AD/D, DBUS/PI NEW, ;LOOK AT NEW LEVEL ; 7957 DISP/DP LEFT, 3T, ;DISPATCH ON IT U 2330, 2330,3773,0000,4074,4003,1701,0000,0000,0000 ; 7958 J/PI ;GO TO 1 OF NEXT 7 PLACES U 2331, 3506,3551,1414,4370,4007,0700,0000,0004,0000 ; 7959 =1001 [PI]_[PI].OR.#, #/040000, HOLD LEFT, J/PIP1 U 2332, 3507,3551,1414,4370,4007,0700,0000,0002,0000 ; 7960 =1010 [PI]_[PI].OR.#, #/020000, HOLD LEFT, J/PIP2 U 2333, 3510,3551,1414,4370,4007,0700,0000,0001,0000 ; 7961 =1011 [PI]_[PI].OR.#, #/010000, HOLD LEFT, J/PIP3 U 2334, 3511,3551,1414,4370,4007,0700,0000,0000,4000 ; 7962 =1100 [PI]_[PI].OR.#, #/004000, HOLD LEFT, J/PIP4 U 2335, 3512,3551,1414,4370,4007,0700,0000,0000,2000 ; 7963 =1101 [PI]_[PI].OR.#, #/002000, HOLD LEFT, J/PIP5 U 2336, 3513,3551,1414,4370,4007,0700,0000,0000,1000 ; 7964 =1110 [PI]_[PI].OR.#, #/001000, HOLD LEFT, J/PIP6 U 2337, 3514,3551,1414,4370,4007,0700,0000,0000,0400 ; 7965 =1111 [PI]_[PI].OR.#, #/000400, HOLD LEFT, J/PIP7 U 3506, 3515,4751,1206,4374,4007,0700,0000,0000,0001 ; 7966 PIP1: [BRX]_0 XWD [1], J/PI10 ;REMEMBER WE ARE AT LEVEL 1 U 3507, 3515,4751,1206,4374,4007,0700,0000,0000,0002 ; 7967 PIP2: [BRX]_0 XWD [2], J/PI10 ;REMEMBER WE ARE AT LEVEL 2 U 3510, 3515,4751,1206,4374,4007,0700,0000,0000,0003 ; 7968 PIP3: [BRX]_0 XWD [3], J/PI10 ;REMEMBER WE ARE AT LEVEL 3 U 3511, 3515,4751,1206,4374,4007,0700,0000,0000,0004 ; 7969 PIP4: [BRX]_0 XWD [4], J/PI10 ;REMEMBER WE ARE AT LEVEL 4 U 3512, 3515,4751,1206,4374,4007,0700,0000,0000,0005 ; 7970 PIP5: [BRX]_0 XWD [5], J/PI10 ;REMEMBER WE ARE AT LEVEL 5 U 3513, 3515,4751,1206,4374,4007,0700,0000,0000,0006 ; 7971 PIP6: [BRX]_0 XWD [6], J/PI10 ;REMEMBER WE ARE AT LEVEL 6 U 3514, 3515,4751,1206,4374,4007,0700,0000,0000,0007 ; 7972 PIP7: [BRX]_0 XWD [7], J/PI10 ;REMEMBER WE ARE AT LEVEL 7 ; 7973 ; 7974 PI10: [AR]_[PI].AND.# CLR LH, ;TURN OFF PI SYSTEM U 3515, 3516,4251,1403,4374,4007,0700,0000,0007,7577 ; 7975 #/077577 ; TILL WE ARE DONE U 3516, 3517,7443,0300,4174,4437,0700,0000,0000,0000 ; 7976 .NOT.[AR], LOAD PI ; .. U 3517, 2304,4223,0000,4364,4277,0700,0200,0000,0010 ; 7977 ABORT MEM CYCLE ;NO MORE TRAPS ; 7978 =0 [AR]_VMA IO READ, ;SETUP TO READ WRU BITS ; 7979 WRU CYCLE/1, ; .. U 2304, 3553,4571,1203,4374,4007,0700,0010,0024,1300 ; 7980 CALL [STRTIO] ;START THE CYCLE ; 7981 MEM READ, ;WAIT FOR DATA ; 7982 [AR]_IO DATA, 3T, ;PUT DATA IN AR U 2305, 2306,3771,0003,4364,4007,0331,0200,0000,0002 ; 7983 SKIP ADR.EQ.0 ;SEE IF ANYONE THERE U 2306, 3530,4221,0004,4174,4007,0700,0000,0000,0000 ; 7984 =0 [ARX]_0, J/VECINT ;YES--VECTORED INTERRUPT U 2307, 3520,3445,0603,4174,4007,0700,0000,0000,0000 ; 7985 [AR]_[BRX]*2 ;N*2 ; 7986 [AR]_[AR]+#, #/40, 3T, ;2*N+40 U 3520, 3521,0551,0303,4370,4007,0701,0000,0000,0040 ; 7987 HOLD LEFT ; .. ; 7988 [AR]_[AR]+[EBR], ;ABSOULTE ADDRESS OF U 3521, 3522,0111,1003,4174,4007,0700,0000,0000,0000 ; 7989 J/PI40 ; INTERRUPT INSTRUCTION ; 7990 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 183 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 IO -- INTERNAL DEVICES -- SUBROUTINES ; 7991 ; 7992 ;HERE WITH ABSOLUTE ADDRESS OF INTERRUPT INSTRUCTION IN [AR] U 3522, 3523,3443,0300,4174,4007,0700,0200,0024,1016 ; 7993 PI40: VMA_[AR], VMA PHYSICAL READ ;FETCH THE INSTRUCTION ; 7994 PI50: MEM READ, [AR]_MEM, LOAD VMA, ;FETCH INSTRUCTION U 3523, 3524,3771,0003,4365,5007,0701,0200,0020,0012 ; 7995 3T, FORCE EXEC ;E IS EXEC MODE U 3524, 2312,6553,0300,4374,4007,0321,0000,0025,4340 ; 7996 [AR].XOR.#, #/254340, 3T, SKIP ADL.EQ.0 U 2312, 2320,6553,0300,4374,4007,0321,0000,0026,4000 ; 7997 =0 [AR].XOR.#, #/264000, SKIP ADL.EQ.0, 3T, J/PIJSR U 2313, 3525,4521,1205,4074,4007,0700,0000,0000,0000 ; 7998 [BR]_FLAGS ;SAVE FLAGS ; 7999 AD/ZERO, LOAD FLAGS, U 3525, 0230,4223,0000,4174,4467,0700,0000,0000,0004 ; 8000 J/PIXPCW ;ENTER EXEC MODE AND ASSUME ; 8001 ; WE HAVE AN XPCW ; 8002 ;IF WE HALT HERE ON A VECTORED INTERRUPT, WE HAVE ; 8003 ; T0/ WHAT WE READ FROM BUS AS VECTOR ; 8004 ; ARX/ EPT+100+DEVICE ; 8005 ; BR/ ADDRESS OF ILLEGAL INSTRUCTION ; 8006 ; BRX/ VECTOR (MASKED AND SHIFTED) ; 8007 .IFNOT/1PROC ; 8008 =0 ; 8009 PIJSR: HALT [ILLII] ;NOT A JSR OR XPCW ; 8010 START WRITE, FORCE EXEC ;PREPARE TO STORE OLD PC ; 8011 =0*0 [BR]_PC WITH FLAGS, ;OLD PC ; 8012 CALL [STOBR] ;STORE OLD PC ; 8013 =1*0 [AR]_#, #/0, HOLD RIGHT, ;PREPARE TO CLEAR FLAGS ; 8014 CALL [INCAR] ;BUMP POINTER ; 8015 =1*1 [PC]_[AR], LOAD FLAGS, ;NEW PC ; 8016 J/PISET ;CLEAR PI CYCLE & START ; 8017 ; INTERRUPT PROGRAM ; 8018 = ; 8019 .IF/1PROC ; 8020 =0*0 U 2320, 2404,4751,1217,4374,4007,0700,0000,0000,0101 ; 8021 PIJSR: HALT [ILLII] ;NOT A JSR OR XPCW ; 8022 =0*1 START WRITE, FORCE EXEC, ;STORE OLD PC U 2321, 3661,4443,0000,4174,4007,0700,0210,0023,0002 ; 8023 CALL [STORE-INT-PC] U 2325, 3526,3771,0003,4374,0007,0700,0000,0000,0000 ; 8024 =1*1 [AR]_#, #/0, HOLD RIGHT ;PREPARE TO CLEAR FLAGS U 3526, 3527,0111,0703,4170,4007,0700,0000,0000,0000 ; 8025 [AR]_[AR]+1, HOLD LEFT ;BUMP POINTER ; 8026 [PC]_[AR], LOAD FLAGS, ;NEW PC U 3527, 2561,3441,0301,4174,4467,0700,0000,0000,0004 ; 8027 J/PISET ;CLEAR PI CYCLE & START ; 8028 ; INTERRUPT PROGRAM ; 8029 .ENDIF/1PROC ; 8030 ; 8031 ;HERE TO PROCESS A VECTORED INTERRUPT. AT THIS POINT: ; 8032 ; AR/ WRU BITS (BIT 18 FOR DEVICE 0) ; 8033 ; ARX/ 0 ; 8034 VECINT: [AR]_[AR]*2, ;SHIFT LEFT (UNSHIFTED ON DP) U 3530, 2314,3445,0303,4174,4007,0530,0000,0000,0000 ; 8035 SKIP DP18 ;ANYONE THERE? ; 8036 =0 [ARX]_[ARX]+[XWD1], ;NO--BUMP BOTH HALVES U 2314, 3530,0111,1504,4174,4007,0700,0000,0000,0000 ; 8037 J/VECINT ;KEEP LOOKING ; 8038 [AR]_VMA IO READ, ;SETUP FOR VECTOR CYCLE U 2315, 2316,4571,1203,4374,4007,0700,0000,0024,1240 ; 8039 VECTOR CYCLE/1 ; .. ; 8040 =0 [AR]_[AR].OR.[ARX], ;PUT IN UNIT NUMBER U 2316, 3553,3111,0403,4174,4007,0700,0010,0000,0000 ; 8041 CALL [STRTIO] ;START CYCLE ; 8042 MEM READ, ;WAIT FOR VECTOR (SEE DPM5) U 2317, 2322,3771,0016,4364,4007,0700,0200,0000,0002 ; 8043 [T0]_IO DATA ;GET VECTOR ; 8044 =0 [BR]_[EBR]+#, 3T, #/100, ;EPT+100 U 2322, 3550,0551,1005,4374,4007,0701,0010,0000,0100 ; 8045 CALL [CLARXL] ;CLEAR ARX LEFT ; 8046 [ARX]_[ARX]+[BR], ;EPT+100+DEVICE U 2323, 3531,0111,0504,4174,4007,0700,0200,0024,1016 ; 8047 VMA PHYSICAL READ ;FETCH WORD ; 8048 MEM READ, [BR]_MEM, 3T, ;GET POINTER U 3531, 2326,3771,0005,4365,5007,0331,0200,0000,0002 ; 8049 SKIP ADR.EQ.0 ;SEE IF NON-ZERO ; 8050 =0 [BRX]_([T0].AND.#)*.5, 3T, ;OK--MAKE VECTOR MOD 400 U 2326, 3532,4557,1606,4374,4007,0701,0000,0000,0774 ; 8051 #/774, J/VECIN1 ; AND SHIFT OVER U 2327, 2404,4751,1217,4374,4007,0700,0000,0000,0102 ; 8052 HALT [ILLINT] U 3532, 3533,3447,0606,4174,4007,0700,0000,0000,0000 ; 8053 VECIN1: [BRX]_[BRX]*.5 ;SHIFT 1 MORE PLACE ; 8054 [BR]_[BR]+[BRX], ;ADDRESS OF WORD TO USE ; 8055 LOAD VMA, FORCE EXEC, ;FORCE EXEC VIRTUAL ADDRESS U 3533, 3523,0111,0605,4174,4007,0700,0200,0024,0012 ; 8056 START READ, J/PI50 ;GO GET INSTRUCTION ; 8057 ; 8058 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 184 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 PRIORITY INTERRUPTS -- DISMISS SUBROUTINE ; 8059 .TOC "PRIORITY INTERRUPTS -- DISMISS SUBROUTINE" ; 8060 ; 8061 ;SUBROUTINE TO DISMISS THE HIGHEST PI IN PROGRESS ; 8062 ;RETURNS 4 ALWAYS ; 8063 ; 8064 ;DISMISS: ; 8065 ; TR [PI], #/077400 ;ANY PI IN PROGRESS? ; 8066 =0 U 2340, 3534,3771,0005,4374,4007,0700,0000,0004,0000 ; 8067 JEN1: [BR]_#, PI.IP1/1, J/DSMS1 ;YES--START LOOP U 2341, 0004,4443,0000,4174,4004,1700,0000,0000,0000 ; 8068 RETURN [4] ;NO--JUST RETURN ; 8069 U 3534, 2342,4113,0514,4174,4007,0330,0000,0000,0000 ; 8070 DSMS1: [PI].AND.[BR], SKIP ADR.EQ.0 U 2342, 0004,5111,0514,4170,4004,1700,0000,0000,0000 ; 8071 =0 [PI]_[PI].AND.NOT.[BR], HOLD LEFT, RETURN [4] U 2343, 3534,3447,0505,4174,4007,0700,0000,0000,0000 ; 8072 [BR]_[BR]*.5, J/DSMS1 ; 8073 ; 8074 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 185 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 ITS IO INSTRUCTIONS ; 8075 .TOC "ITS IO INSTRUCTIONS" ; 8076 ; 8077 .IF/ITSIO ; 8078 ; 8079 .DCODE D 0710, 1210,1614,0100 ; 8080 710: IOT, B/10, J/IORDI ; IORDI D 0711, 1214,1614,0100 ; 8081 711: IOT, B/14, J/IORDI ; IORDQ D 0712, 1210,1460,0100 ; 8082 712: IOT, B/10, J/IORD ; IORD D 0713, 1210,1461,0100 ; 8083 713: IOT, B/10, J/IOWR ; IOWR D 0714, 1210,1644,0100 ; 8084 714: IOT, B/10, J/IOWRI ; IOWRI D 0715, 1214,1644,0100 ; 8085 715: IOT, B/14, J/IOWRI ; IOWRQ ; 8086 D 0720, 1200,1614,0100 ; 8087 720: IOT, B/0, J/IORDI ; IORDBI D 0721, 1204,1614,0100 ; 8088 721: IOT, B/4, J/IORDI ; IORDBQ D 0722, 1200,1460,0100 ; 8089 722: IOT, B/0, J/IORD ; IORDB D 0723, 1200,1461,0100 ; 8090 723: IOT, B/0, J/IOWR ; IOWRB D 0724, 1200,1644,0100 ; 8091 724: IOT, B/0, J/IOWRI ; IOWRBI D 0725, 1204,1644,0100 ; 8092 725: IOT, B/4, J/IOWRI ; IOWRBQ ; 8093 .UCODE ; 8094 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 186 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 ITS IO INSTRUCTIONS ; 8095 ; 8096 1460: ; 8097 IORD: CLR IO BUSY, U 1460, 3535,3443,0300,4174,4137,0700,0200,0004,0012 ; 8098 VMA_[AR], START READ ; 8099 MEM READ, [AR]_MEM, U 3535, 3536,3771,0003,4365,5007,0700,0200,0000,0002 ; 8100 J/IORD0 ; 8101 ; 8102 1614: ; 8103 IORDI: CLR IO BUSY, U 1614, 2130,4443,0000,4174,4133,7700,0000,0000,0000 ; 8104 B DISP ; Which bus? ; 8105 =10** [AR]_#, #/3, HOLD RIGHT, ; Unibus I U 2130, 3536,3771,0003,4374,0007,0700,0000,0000,0003 ; 8106 J/IORD0 ; 8107 [AR]_#, #/1, HOLD RIGHT, ; Unibus Q U 2134, 3536,3771,0003,4374,0007,0700,0000,0000,0001 ; 8108 J/IORD0 ; 8109 ; 8110 IORD0: CLR IO LATCH, U 3536, 0244,4443,0000,4174,4123,7700,0000,0000,0000 ; 8111 B DISP ; Which mode? ; 8112 =01** [ARX]_VMA IO READ, ; Byte mode ; 8113 IO BYTE/1, U 0244, 2344,4571,1204,4374,4007,0700,0000,0024,1220 ; 8114 J/IORD1 U 0254, 2344,4571,1204,4374,4007,0700,0000,0024,1200 ; 8115 [ARX]_VMA IO READ ; Word mode ; 8116 =0 ; 8117 IORD1: VMA_[AR].OR.[ARX] WITH FLAGS, ; Set up VMA U 2344, 3542,3113,0304,4174,4007,0701,0210,0000,0036 ; 8118 CALL [IOWAIT] ; and wait for it ; 8119 MEM READ, [BR]_IO DATA, ; Get data U 2345, 0566,3771,0005,4364,4003,7700,0200,0000,0002 ; 8120 B DISP ; Which mode? U 0566, 2346,4553,0300,4374,4007,0331,0000,0000,0001 ; 8121 =01** TR [AR], #/1, J/IORD2 ; Byte mode: which half? U 0576, 1400,3440,0505,0174,4007,0700,0400,0000,0000 ; 8122 IORDEX: AC_[BR], J/DONE ; Word mode: return it ; 8123 ; 8124 =0 U 2346, 2350,3447,0505,4174,4007,0700,2000,0071,0005 ; 8125 IORD2: [BR]_[BR]*.5, SC_5, J/IORD3 ; Odd byte: go shift it U 2347, 0576,4551,0505,4374,4007,0700,0000,0000,0377 ; 8126 [BR]_[BR].AND.#, #/377, J/IORDEX ; Even byte: return it ; 8127 ; 8128 =0 U 2350, 2350,3447,0505,4174,4007,0630,2000,0060,0000 ; 8129 IORD3: [BR]_[BR]*.5, STEP SC, J/IORD3 ; Shift it U 2351, 0576,4551,0505,4374,4007,0700,0000,0000,0377 ; 8130 [BR]_[BR].AND.#, #/377, J/IORDEX ; And return it ; 8131 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 187 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 ITS IO INSTRUCTIONS ; 8132 ; 8133 1461: ; 8134 IOWR: CLR IO BUSY, U 1461, 3537,3443,0300,4174,4137,0700,0200,0004,0012 ; 8135 VMA_[AR], START READ ; 8136 MEM READ, [AR]_MEM, U 3537, 3540,3771,0003,4365,5007,0700,0200,0000,0002 ; 8137 J/IOWR0 ; 8138 ; 8139 1644: ; 8140 IOWRI: CLR IO BUSY, U 1644, 2132,4443,0000,4174,4133,7700,0000,0000,0000 ; 8141 B DISP ; Which bus? ; 8142 =10** [AR]_#, #/3, HOLD RIGHT, ; Unibus I U 2132, 3540,3771,0003,4374,0007,0700,0000,0000,0003 ; 8143 J/IOWR0 ; 8144 [AR]_#, #/1, HOLD RIGHT, ; Unibus Q U 2136, 3540,3771,0003,4374,0007,0700,0000,0000,0001 ; 8145 J/IOWR0 ; 8146 ; 8147 IOWR0: [BR]_AC, ; Data to write ; 8148 CLR IO LATCH, U 3540, 1366,3771,0005,0276,6123,7700,0000,0000,0000 ; 8149 B DISP ; Which mode? U 1366, 2354,4553,0300,4374,4007,0331,0000,0000,0001 ; 8150 =01** TR [AR], #/1, J/IOWR2 ; Byte mode: which half? U 1376, 3541,4571,1204,4374,4007,0700,0000,0021,1200 ; 8151 [ARX]_VMA IO WRITE ; Word mode U 3541, 2352,3113,0304,4174,4007,0701,0200,0000,0036 ; 8152 IOWR1: VMA_[AR].OR.[ARX] WITH FLAGS ; Set up VMA ; 8153 =0 MEM WRITE, MEM_[BR], ; Put data U 2352, 3542,3333,0005,4175,5007,0701,0210,0000,0002 ; 8154 CALL [IOWAIT] ; and wait for it U 2353, 0070,3443,0100,4174,4156,4700,0200,0014,0012 ; 8155 DONE ; thats it ; 8156 ; 8157 =0 U 2354, 2356,3445,0505,4174,4007,0700,2000,0071,0005 ; 8158 IOWR2: [BR]_[BR]*2, SC_5, J/IOWR3 ; Odd byte: go shift it U 2355, 3541,4571,1204,4374,4007,0700,0000,0021,1220 ; 8159 [ARX]_VMA IO WRITE, IO BYTE/1, J/IOWR1 ; Even byte: all set ; 8160 ; 8161 =0 U 2356, 2356,3445,0505,4174,4007,0630,2000,0060,0000 ; 8162 IOWR3: [BR]_[BR]*2, STEP SC, J/IOWR3 ; Shift it U 2357, 3541,4571,1204,4374,4007,0700,0000,0021,1220 ; 8163 [ARX]_VMA IO WRITE, IO BYTE/1, J/IOWR1 ; All set ; 8164 ; 8165 .ENDIF/ITSIO ; 8166 ; 8167 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 188 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 EXTERNAL IO INSTRUCTIONS ; 8168 .TOC "EXTERNAL IO INSTRUCTIONS" ; 8169 ; 8170 .IFNOT/ITSIO ; 8171 ; 8172 .DCODE ; 8173 710: IOT, WORD-TNE, J/TIOX ; 8174 711: IOT, WORD-TNN, J/TIOX ; 8175 720: IOT, TNE, J/TIOX ; 8176 721: IOT, TNN, J/TIOX ; 8177 .UCODE ; 8178 ; 8179 1614: ; 8180 TIOX: CALL [IORD] ; 8181 1617: [BR]_[AR].AND.AC, TEST DISP ; 8182 ; 8183 .DCODE ; 8184 712: IOT, B/10, J/RDIO ; 8185 713: IOT, B/10, J/WRIO ; 8186 722: IOT, B/0, J/RDIO ; 8187 723: IOT, B/0, J/WRIO ; 8188 .UCODE ; 8189 ; 8190 1460: ; 8191 RDIO: CALL [IORD] ; 8192 1463: AC_[AR], J/DONE ; 8193 ; 8194 1461: ; 8195 WRIO: [BR]_AC, J/IOWR ; 8196 ; 8197 .DCODE ; 8198 714: IOT, B/10, J/BIXUB ; 8199 715: IOT, B/14, J/BIXUB ; 8200 724: IOT, B/0, J/BIXUB ; 8201 725: IOT, B/4, J/BIXUB ; 8202 .UCODE ; 8203 ; 8204 1644: ; 8205 BIXUB: [BRX]_[AR], ;SAVE EFFECTIVE ADDRESS ; 8206 CALL [IORD] ;GO GET THE DATA ; 8207 1647: [BR]_[AR], ;COPY DATA ITEM ; 8208 B DISP ;SEE IF SET OR CLEAR ; 8209 =1011 [BR]_[BR].OR.AC, ;SET BITS ; 8210 J/BIXUB1 ;GO DO WRITE ; 8211 [BR]_[BR].AND.NOT.AC, ;CLEAR BITS ; 8212 J/BIXUB1 ;GO DO WRITE ; 8213 ; 8214 BIXUB1: [AR]_[BRX], ;RESTORE ADDRESS ; 8215 J/IOWR ; 8216 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 189 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 EXTERNAL IO INSTRUCTIONS ; 8217 ; 8218 ;SUBROUTINE TO READ FROM AN IO DEVICE ; 8219 ;CALL WITH: ; 8220 ; SECTION 0 EFFECTIVE ADDRESS IN AR ; 8221 ; INSTRUCTION IN HR ; 8222 ;RETURN 3 WITH WORD OR BYTE IN AR ; 8223 ; ; 8224 =0 ; 8225 IORD: CLR IO BUSY, ;CLEAR BUSY ; 8226 CALL [IOEA] ;COMPUTE IO EA ; 8227 B DISP ; 8228 =10111 [BR]_VMA IO READ, ;BYTE MODE ; 8229 IO BYTE/1, ;SET BYTE FLAG ; 8230 J/IORD1 ;GO DO C/A CYCLE ; 8231 =11111 [BR]_VMA IO READ ;WORD MODE ; 8232 = ; 8233 =0 ; 8234 IORD1: VMA_[AR].OR.[BR] WITH FLAGS, ; 8235 CALL [IOWAIT] ;WAIT FOR THINGS COMPLETE ; 8236 MEM READ, ;MAKE SURE REALLY READY ; 8237 [BR]_IO DATA, ;PUT DATA IN BR ; 8238 B DISP ;SEE IF BYTE MODE ; 8239 =0111 TR [AR], #/1, J/IORD2 ;BYTE MODE SEE IF ODD ; 8240 [AR]_[BR], RETURN [3] ;ALL DONE ; 8241 ; 8242 ;HERE ON WORD MODE ; 8243 =0 ; 8244 IORD2: [BR]_[BR]*.5, SC_5, ;LEFT BYTE ; 8245 J/IORD3 ;GO SHIFT IT ; 8246 [AR]_[BR].AND.#, ;MASK IT ; 8247 #/377, RETURN [3] ;ALL DONE ; 8248 ; 8249 =0 ; 8250 IORD3: [BR]_[BR]*.5, ;SHIFT OVER ; 8251 STEP SC, J/IORD3 ; .. ; 8252 [AR]_[BR].AND.#, ;MASK IT ; 8253 #/377, RETURN [3] ;ALL DONE ; 8254 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 190 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 EXTERNAL IO INSTRUCTIONS ; 8255 ; 8256 ;ROUTINE TO WRITE TO AN IO DEVICE ; 8257 ;CALL WITH: ; 8258 ; SECTION 0 EFFECTIVE ADDRESS IN AR ; 8259 ; INSTRUCTION IN HR ; 8260 ; WORD OR BYTE IN BR ; 8261 ;RETURNS BACK TO USER ; 8262 ; ; 8263 =0 ; 8264 IOWR: CLR IO BUSY, ;CLEAR BUSY ; 8265 CALL [IOEA] ;COMPUTE IO EA ; 8266 B DISP ; 8267 =10111 TR [AR], #/1, J/IOWR2 ;BYTE MODE ; 8268 =11111 [ARX]_VMA IO WRITE ;SETUP FLAGS ; 8269 = ; 8270 IOWR1: VMA_[AR].OR.[ARX] WITH FLAGS ; 8271 =0 MEM WRITE, MEM_[BR], ;SEND DATA ; 8272 CALL [IOWAIT] ;WAIT FOR DATA ; 8273 DONE ;RETURN ; 8274 ; 8275 ;HERE FOR BYTE MODE ; 8276 =0 ; 8277 IOWR2: [BR]_[BR]*2, SC_5, ;ODD--MOVE LEFT ; 8278 J/IOWR3 ; .. ; 8279 [ARX]_VMA IO WRITE, ;SETUP FLAGS ; 8280 IO BYTE/1, J/IOWR1 ; .. ; 8281 ; 8282 =0 ; 8283 IOWR3: [BR]_[BR]*2, STEP SC, ;SHIFT LEFT ; 8284 J/IOWR3 ;KEEP SHIFTING ; 8285 [ARX]_VMA IO WRITE, ;SETUP FLAGS ; 8286 IO BYTE/1, J/IOWR1 ; .. ; 8287 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 191 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 EXTERNAL IO INSTRUCTIONS ; 8288 ; 8289 ;HERE TO COMPUTE IO EFFECTIVE ADDRESS ; 8290 ;CALL WITH: ; 8291 ; SECTION 0 EFFECTIVE ADDRESS IN AR ; 8292 ; INSTRUCTION IN HR ; 8293 ;RETURN 1 WITH EA IN AR ; 8294 ; ; 8295 =0 ; 8296 IOEA: VMA_[PC]-1, ;GET INSTRUCTION ; 8297 START READ, ; .. ; 8298 CALL [LOADAR] ;PUT WORD IN AR ; 8299 [BRX]_.NOT.[AR] ;SEE IF IN RANGE 700-777 ; 8300 TL [BRX], #/700000 ; .. ; 8301 =0 ; 8302 IOEA1: TL [HR], #/20, J/IOEA2 ;INDIRECT? ; 8303 WORK[YSAVE]_[AR] CLR LH, ;DIRECT IO INSTRUCTION ; 8304 J/IOEA1 ;SAVE Y FOR EA CALCULATION ; 8305 =0 ; 8306 IOEA2: [AR]_WORK[YSAVE], ;@--GET SAVED Y ; 8307 J/IOEAI ;GET Y AND GO ; 8308 EA MODE DISP ;WAS THERE INDEXING? ; 8309 =1101 [ARX]_XR, SKIP ADL.LE.0, ;SEE IF LOCAL OR GLOBAL INDEXING ; 8310 2T, J/IOEAX ; .. ; 8311 [AR]_WORK[YSAVE], ;JUST PLAIN IO ; 8312 CLR IO LATCH, RETURN [1] ; 8313 ; 8314 IOEAI: READ [HR], DBUS/DP, ;LOAD XR FLOPS IN CASE ; 8315 LOAD INST EA ; THERE IS INDEXING ; 8316 TL [HR], #/17 ;WAS THERE ALSO INDEXING ; 8317 =0 [AR]_[AR]+XR, 3T, HOLD LEFT ;YES--ADD IN INDEX VALUE ; 8318 VMA_[AR], START READ ;FETCH DATA WORD ; 8319 MEM READ, [AR]_MEM, ;GO GET DATA WORD ; 8320 CLR IO LATCH, RETURN [1] ; 8321 ; 8322 =0 ; 8323 IOEAX: [AR]_[ARX]+WORK[YSAVE], ;GLOBAL INDEXING ; 8324 CLR IO LATCH, RETURN [1] ; 8325 [AR]_[ARX]+WORK[YSAVE] ;LOCAL INDEXING ; 8326 [AR]_0, HOLD RIGHT, ; 8327 CLR IO LATCH, RETURN [1] ; 8328 ; 8329 .ENDIF/ITSIO ; 8330 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 192 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 EXTERNAL IO INSTRUCTIONS ; 8331 ; 8332 ;WAIT FOR IO TO COMPLETE ; 8333 ;RETURNS 1 OR PAGE FAILS ; 8334 ; ; 8335 IOWAIT: SC_S#, S#/200, ;DELAY ; 8336 [T0]_VMA, ;GET VMA U 3542, 2360,3771,0016,4354,4007,0650,2000,0071,0200 ; 8337 SKIP/-IO BUSY ;SEE IF BUSY YET ; 8338 =00 ; 8339 IOW1: CLR IO LATCH, ;WENT BUSY ; 8340 WORK[SV.VMA]_[T0], ;MAKE SURE SV.VMA IS SETUP U 2360, 3543,3333,0016,7174,4127,0700,0400,0000,0210 ; 8341 J/IOW2 ;WAIT FOR IT TO CLEAR ; 8342 SC_SC-1, SCAD DISP, 5T, ;SEE IF DONE YET ; 8343 SKIP/-IO BUSY, ; .. U 2361, 2360,4443,0000,4174,4006,7653,2000,0060,0000 ; 8344 J/IOW1 ;BACK TO LOOP ; 8345 CLR IO LATCH, ;WENT BUSY AND TIMEOUT ; 8346 WORK[SV.VMA]_[T0], ;MAKE SURE SV.VMA IS SETUP U 2362, 3543,3333,0016,7174,4127,0700,0400,0000,0210 ; 8347 J/IOW2 ; .. ; 8348 WORK[SV.VMA]_[T0], ;MAKE SURE SV.VMA IS SETUP U 2363, 2367,3333,0016,7174,4007,0700,0400,0000,0210 ; 8349 J/IOW5 ;GO TRAP ; 8350 ; 8351 IOW2: SC_S#, S#/777, ;GO TIME IO U 3543, 2364,4443,0000,4174,4007,0650,2000,0071,0777 ; 8352 SKIP/-IO BUSY ; .. ; 8353 =0 ; 8354 IOW3: CLR IO LATCH, ;TRY TO CLEAR LATCH U 2364, 2366,4443,0000,4174,4127,0630,2000,0060,0000 ; 8355 STEP SC, J/IOW4 ;STILL BUSY U 2365, 0001,4443,0000,4174,4004,1700,0000,0000,0000 ; 8356 RETURN [1] ;IDLE ; 8357 ; 8358 =0 ; 8359 IOW4: CLR IO LATCH, 5T, ;TRY TO CLEAR LATCH ; 8360 SKIP/-IO BUSY, ;SEE IF STILL BUSY U 2366, 2364,4443,0000,4174,4127,0653,0000,0000,0000 ; 8361 J/IOW3 ; .. U 2367, 3610,4571,1206,4374,4007,0700,0000,0020,0000 ; 8362 IOW5: [BRX]_[200000] XWD 0, J/HARD ; 8363 ; 8364 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 193 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 SMALL SUBROUTINES ; 8365 .TOC "SMALL SUBROUTINES" ; 8366 ; 8367 ;HERE ARE A COLLECTION ON 1-LINE SUBROUTINES ; 8368 LOADAR: MEM READ, [AR]_MEM, ;FROM MEMORY TO AR U 3544, 0001,3771,0003,4365,5004,1700,0200,0000,0002 ; 8369 RETURN [1] ;RETURN TO CALLER ; 8370 U 3545, 0001,3771,0004,4365,5004,1700,0200,0000,0002 ; 8371 LOADARX: MEM READ, [ARX]_MEM, RETURN [1] ; 8372 U 3546, 0001,3772,0000,4365,5004,1700,0200,0000,0002 ; 8373 LOADQ: MEM READ, Q_MEM, RETURN [1] ; 8374 U 3547, 0001,4223,0000,4364,4274,1700,0200,0000,0010 ; 8375 ABORT: ABORT MEM CYCLE, RETURN [1] ; 8376 U 3550, 0001,4221,0004,4174,0004,1700,0000,0000,0000 ; 8377 CLARXL: [ARX]_0, HOLD RIGHT, RETURN [1] ; 8378 U 3551, 0001,0111,0703,4174,4004,1700,0000,0000,0000 ; 8379 INCAR: [AR]_[AR]+1, RETURN [1] ; 8380 U 3552, 0001,3445,0505,4174,4004,1700,0000,0000,0000 ; 8381 SBRL: [BR]_[BR]*2, RETURN [1] ; 8382 U 3553, 0001,3443,0300,4174,4004,1701,0200,0000,0036 ; 8383 STRTIO: VMA_[AR] WITH FLAGS, RETURN [1] ; 8384 U 3554, 0004,3333,0005,4175,5004,1701,0200,0000,0002 ; 8385 STOBR: MEM WRITE, MEM_[BR], RETURN [4] ; 8386 U 3555, 0001,3333,0001,4175,5004,1701,0200,0000,0002 ; 8387 STOPC: MEM WRITE, MEM_[PC], RETURN [1] ; 8388 U 3560, 0001,3440,0404,0174,4004,1700,0400,0000,0000 ; 8389 AC_ARX: AC_[ARX], RETURN [1] ; 8390 ; 8391 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 194 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 UNDEFINED IO INSTRUCTIONS ; 8392 .TOC "UNDEFINED IO INSTRUCTIONS" ; 8393 ; 8394 .DCODE D 0703, 0003,1650,2100 ; 8395 703: I, B/3, J/IOT700 D 0706, 0006,1650,2100 ; 8396 706: I, B/6, J/IOT700 D 0707, 0007,1650,2100 ; 8397 I, B/7, J/IOT700 ; 8398 D 0716, 0006,1651,2100 ; 8399 716: I, B/6, J/IOT710 D 0717, 0007,1651,2100 ; 8400 I, B/7, J/IOT710 ; 8401 D 0726, 0006,1652,2100 ; 8402 726: I, B/6, J/IOT720 D 0727, 0007,1652,2100 ; 8403 I, B/7, J/IOT720 ; 8404 D 0730, 0000,1653,2100 ; 8405 730: I, B/0, J/IOT730 D 0731, 0001,1653,2100 ; 8406 I, B/1, J/IOT730 D 0732, 0002,1653,2100 ; 8407 I, B/2, J/IOT730 D 0733, 0003,1653,2100 ; 8408 I, B/3, J/IOT730 D 0734, 0004,1653,2100 ; 8409 I, B/4, J/IOT730 D 0735, 0005,1653,2100 ; 8410 I, B/5, J/IOT730 D 0736, 0006,1653,2100 ; 8411 I, B/6, J/IOT730 D 0737, 0007,1653,2100 ; 8412 I, B/7, J/IOT730 ; 8413 D 0740, 0000,1654,2100 ; 8414 740: I, B/0, J/IOT740 D 0741, 0001,1654,2100 ; 8415 I, B/1, J/IOT740 D 0742, 0002,1654,2100 ; 8416 I, B/2, J/IOT740 D 0743, 0003,1654,2100 ; 8417 I, B/3, J/IOT740 D 0744, 0004,1654,2100 ; 8418 I, B/4, J/IOT740 D 0745, 0005,1654,2100 ; 8419 I, B/5, J/IOT740 D 0746, 0006,1654,2100 ; 8420 I, B/6, J/IOT740 D 0747, 0007,1654,2100 ; 8421 I, B/7, J/IOT740 ; 8422 D 0750, 0000,1655,2100 ; 8423 750: I, B/0, J/IOT750 D 0751, 0001,1655,2100 ; 8424 I, B/1, J/IOT750 D 0752, 0002,1655,2100 ; 8425 I, B/2, J/IOT750 D 0753, 0003,1655,2100 ; 8426 I, B/3, J/IOT750 D 0754, 0004,1655,2100 ; 8427 I, B/4, J/IOT750 D 0755, 0005,1655,2100 ; 8428 I, B/5, J/IOT750 D 0756, 0006,1655,2100 ; 8429 I, B/6, J/IOT750 D 0757, 0007,1655,2100 ; 8430 I, B/7, J/IOT750 ; 8431 D 0760, 0000,1656,2100 ; 8432 760: I, B/0, J/IOT760 D 0761, 0001,1656,2100 ; 8433 I, B/1, J/IOT760 D 0762, 0002,1656,2100 ; 8434 I, B/2, J/IOT760 D 0763, 0003,1656,2100 ; 8435 I, B/3, J/IOT760 D 0764, 0004,1656,2100 ; 8436 I, B/4, J/IOT760 D 0765, 0005,1656,2100 ; 8437 I, B/5, J/IOT760 D 0766, 0006,1656,2100 ; 8438 I, B/6, J/IOT760 D 0767, 0007,1656,2100 ; 8439 I, B/7, J/IOT760 ; 8440 D 0770, 0000,1657,2100 ; 8441 770: I, B/0, J/IOT770 D 0771, 0001,1657,2100 ; 8442 I, B/1, J/IOT770 D 0772, 0002,1657,2100 ; 8443 I, B/2, J/IOT770 D 0773, 0003,1657,2100 ; 8444 I, B/3, J/IOT770 D 0774, 0004,1657,2100 ; 8445 I, B/4, J/IOT770 D 0775, 0005,1657,2100 ; 8446 I, B/5, J/IOT770 D 0776, 0006,1657,2100 ; 8447 I, B/6, J/IOT770 D 0777, 0007,1657,2100 ; 8448 I, B/7, J/IOT770 ; 8449 .UCODE ; 8450 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 195 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 UNDEFINED IO INSTRUCTIONS ; 8451 ; 8452 1650: U 1650, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 8453 IOT700: UUO ; 8454 1651: U 1651, 0624,4443,0000,4174,4007,0700,0000,0000,0000 ; 8455 IOT710: J/BLTX ;GO TO COMMON CODE FOR UBABLT INSTRS ; 8456 1652: U 1652, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 8457 IOT720: UUO ; 8458 1653: U 1653, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 8459 IOT730: UUO ; 8460 1654: U 1654, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 8461 IOT740: UUO ; 8462 1655: U 1655, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 8463 IOT750: UUO ; 8464 1656: U 1656, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 8465 IOT760: UUO ; 8466 1657: U 1657, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 8467 IOT770: UUO ; 8468 ; 8469 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 196 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 UMOVE AND UMOVEM ; 8470 .TOC "UMOVE AND UMOVEM" ; 8471 ; 8472 .DCODE D 0704, 1200,1754,0100 ; 8473 704: IOT, J/UMOVE D 0705, 1200,1755,0100 ; 8474 IOT, J/UMOVEM ; 8475 .UCODE ; 8476 ; 8477 1754: ; 8478 UMOVE: VMA_[AR], ;LOAD VMA ; 8479 START READ, ;START MEMORY U 1754, 3561,3443,0300,4174,4207,0700,0200,0004,0012 ; 8480 SPEC/PREV ;FORCE PREVIOUS ; 8481 MEM READ, ;WAIT FOR MEMORY ; 8482 [AR]_MEM, ;PUT DATA IN AR U 3561, 1515,3771,0003,4365,5007,0700,0200,0000,0002 ; 8483 J/STAC ;GO PUT AR IN AC ; 8484 ; 8485 1755: ; 8486 UMOVEM: VMA_[AR], ;LOAD VMA ; 8487 START WRITE, ;START MEMORY U 1755, 3562,3443,0300,4174,4207,0700,0200,0003,0012 ; 8488 SPEC/PREV ;FORCE PREVIOUS ; 8489 [AR]_AC, ;FETCH AC U 3562, 1516,3771,0003,0276,6007,0700,0000,0000,0000 ; 8490 J/STMEM ;STORE IN MEMORY ; 8491 ; 8492 ;HERE WITH HALT CODE IN THE T1 ; 8493 =010* ; 8494 HALTED: WORK[SV.ARX]_[ARX], ;SAVE TEMP REGISTER U 2404, 3565,3333,0004,7174,4007,0700,0410,0000,0212 ; 8495 CALL [SAVVMA] ;PUT VMA IN WORK[SV.VMA] ; 8496 =110* ABORT MEM CYCLE, ;ABORT CYCLE IN PROGRESS U 2414, 3564,4223,0000,4364,4277,0700,0210,0000,0010 ; 8497 CALL [WRTHSB] ;WRITE HALT STATUS BLOCK ; 8498 =111* U 2416, 3563,4221,0004,4174,4007,0700,0200,0021,1016 ; 8499 PWRON: [ARX]_0, VMA PHYSICAL WRITE ;STORE HALT CODE ; 8500 = U 3563, 2370,3333,0017,4175,5007,0701,0200,0000,0002 ; 8501 MEM WRITE, MEM_[T1] ; IN LOCATION 0 ; 8502 =0 NEXT [ARX] PHYSICAL WRITE, U 2370, 3555,0111,0704,4170,4007,0700,0210,0023,1016 ; 8503 CALL [STOPC] U 2371, 0005,4443,0000,4174,4107,0700,0000,0000,0074 ; 8504 H1: SET HALT, J/HALTLP ;TELL CONSOLE WE HAVE HALTED ; 8505 ; 8506 ; 8507 4: UNHALT, ;RESET CONSOLE U 0004, 2372,4443,0000,4174,4107,0640,0000,0000,0062 ; 8508 SKIP EXECUTE, J/CONT ;SEE IF CO OR EX ; 8509 5: U 0005, 0004,4443,0000,4174,4007,0660,0000,0000,0000 ; 8510 HALTLP: SKIP/-CONTINUE, J/4 ;WAIT FOR CONTINUE ; 8511 ; 8512 =0 ; 8513 CONT: VMA_[PC], ;LOAD PC INTO VMA ; 8514 FETCH, ;START READ U 2372, 0077,3443,0100,4174,4007,0700,0200,0014,0012 ; 8515 J/XCTGO ;DO THE INSTRUCTION U 2373, 2374,4571,1203,4374,4007,0700,0000,0024,1200 ; 8516 [AR]_VMA IO READ ;PUT FLAGS IN AR ; 8517 =0 [AR]_[AR].OR.#, ;PUT IN ADDRESS ; 8518 #/200000, HOLD LEFT, ; OF CSL REGISTER U 2374, 3553,3551,0303,4370,4007,0700,0010,0020,0000 ; 8519 CALL [STRTIO] ; 8520 CONT1: MEM READ, ;WAIT FOR DATA ; 8521 [HR]_MEM, ;PUT IN HR ; 8522 LOAD INST, ;LOAD IR, ETC. U 2375, 2564,3771,0002,4365,5617,0700,0200,0000,0002 ; 8523 J/XCT1 ;GO DO THE INSTRUCTION ; 8524 ; 8525 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 197 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 WRITE HALT STATUS BLOCK ; 8526 .TOC "WRITE HALT STATUS BLOCK" ; 8527 ; 8528 ;THE HALT STATUS BLOCK LOOKS LIKE: ; 8529 ; 8530 ; !=======================================================! ; 8531 ; !00! MAG ! ; 8532 ; !-------------------------------------------------------! ; 8533 ; !01! PC ! ; 8534 ; !-------------------------------------------------------! ; 8535 ; !02! HR ! ; 8536 ; !-------------------------------------------------------! ; 8537 ; !03! AR ! ; 8538 ; !-------------------------------------------------------! ; 8539 ; !04! ARX ! ; 8540 ; !-------------------------------------------------------! ; 8541 ; !05! BR ! ; 8542 ; !-------------------------------------------------------! ; 8543 ; !06! BRX ! ; 8544 ; !-------------------------------------------------------! ; 8545 ; !07! ONE ! ; 8546 ; !-------------------------------------------------------! ; 8547 ; !10! EBR ! ; 8548 ; !-------------------------------------------------------! ; 8549 ; !11! UBR ! ; 8550 ; !-------------------------------------------------------! ; 8551 ; !12! MASK ! ; 8552 ; !-------------------------------------------------------! ; 8553 ; !13! FLG ! ; 8554 ; !-------------------------------------------------------! ; 8555 ; !14! PI ! ; 8556 ; !-------------------------------------------------------! ; 8557 ; !15! XWD1 ! ; 8558 ; !-------------------------------------------------------! ; 8559 ; !16! T0 ! ; 8560 ; !-------------------------------------------------------! ; 8561 ; !17! T1 ! ; 8562 ; !=======================================================! ; 8563 ; ! VMA FLAGS ! VMA ! ; 8564 ; !=======================================================! ; 8565 ; 8566 ;START AT 1 TO DUMP 2901 REGISTERS INTO MAIN MEMORY ; 8567 1: WORK[SV.ARX]_[ARX], ;SAVE TEMP REGISTER U 0001, 3565,3333,0004,7174,4007,0700,0410,0000,0212 ; 8568 CALL [SAVVMA] ;WORK[SV.VMA]_VMA U 0011, 2124,3771,0004,7274,4007,0701,0000,0000,0227 ; 8569 11: [ARX]_WORK[HSBADR] U 2124, 3567,4223,0000,4364,4277,0700,0210,0000,0010 ; 8570 =10* ABORT MEM CYCLE, CALL [DUMP] U 2126, 2371,4443,0000,4174,4107,0700,0000,0000,0074 ; 8571 SET HALT, J/H1 ; 8572 ; 8573 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 198 ; DSK: KSHACK; INOUT 50 20:00:51 16-JAN-87 WRITE HALT STATUS BLOCK ; 8574 ; 8575 WRTHSB: [ARX]_WORK[HSBADR], ;GET ADDRESS OF HSB U 3564, 2376,3771,0004,7274,4007,0422,0000,0000,0227 ; 8576 SKIP AD.LE.0, 4T ;SEE IF VALID ; 8577 =0 READ [MASK], LOAD PI, ;TURN OFF PI SYSTEM U 2376, 3567,3333,0012,4174,4437,0700,0000,0000,0000 ; 8578 J/DUMP ; AND GO TAKE DUMP ; 8579 [ARX]_WORK[SV.ARX], U 2377, 0002,3771,0004,7274,4004,1701,0000,0000,0212 ; 8580 RETURN [2] ;DO NOT DUMP ANYTHING ; 8581 U 3565, 3566,3771,0004,4354,4007,0700,0000,0000,0000 ; 8582 SAVVMA: [ARX]_VMA ; 8583 WORK[SV.VMA]_[ARX], U 3566, 0010,3333,0004,7174,4004,1700,0400,0000,0210 ; 8584 RETURN [10] ; 8585 ; 8586 ;DUMP OUT THE 2901 U 3567, 2144,3333,0004,4174,4007,0700,0200,0021,1016 ; 8587 DUMP: READ [ARX], VMA PHYSICAL WRITE U 2144, 2614,3333,0000,4175,5007,0701,0210,0000,0002 ; 8588 =0* MEM WRITE, MEM_[MAG], CALL [NEXT] U 2146, 3570,3333,0001,4175,5007,0701,0200,0000,0002 ; 8589 MEM WRITE, MEM_[PC] U 3570, 2400,0111,0704,4170,4007,0700,0200,0023,1016 ; 8590 NEXT [ARX] PHYSICAL WRITE U 2400, 2614,3333,0002,4175,5007,0701,0210,0000,0002 ; 8591 =0* MEM WRITE, MEM_[HR], CALL [NEXT] U 2402, 2401,3333,0003,4175,5007,0701,0200,0000,0002 ; 8592 MEM WRITE, MEM_[AR] U 2401, 2614,3333,0003,7174,4007,0700,0410,0000,0211 ; 8593 =0* WORK[SV.AR]_[AR], CALL [NEXT] U 2403, 2405,3771,0003,7274,4007,0701,0000,0000,0212 ; 8594 [AR]_WORK[SV.ARX] U 2405, 2614,3333,0003,4175,5007,0701,0210,0000,0002 ; 8595 =0* MEM WRITE, MEM_[AR], CALL [NEXT] U 2407, 3571,3333,0005,4175,5007,0701,0200,0000,0002 ; 8596 MEM WRITE, MEM_[BR] U 3571, 2410,0111,0704,4170,4007,0700,0200,0023,1016 ; 8597 NEXT [ARX] PHYSICAL WRITE U 2410, 2614,3333,0006,4175,5007,0701,0210,0000,0002 ; 8598 =0* MEM WRITE, MEM_[BRX], CALL [NEXT] U 2412, 3572,3333,0007,4175,5007,0701,0200,0000,0002 ; 8599 MEM WRITE, MEM_[ONE] U 3572, 2411,0111,0704,4170,4007,0700,0200,0023,1016 ; 8600 NEXT [ARX] PHYSICAL WRITE U 2411, 2614,3333,0010,4175,5007,0701,0210,0000,0002 ; 8601 =0* MEM WRITE, MEM_[EBR], CALL [NEXT] U 2413, 3573,3333,0011,4175,5007,0701,0200,0000,0002 ; 8602 MEM WRITE, MEM_[UBR] U 3573, 2415,0111,0704,4170,4007,0700,0200,0023,1016 ; 8603 NEXT [ARX] PHYSICAL WRITE U 2415, 2614,3333,0012,4175,5007,0701,0210,0000,0002 ; 8604 =0* MEM WRITE, MEM_[MASK], CALL [NEXT] U 2417, 3574,3333,0013,4175,5007,0701,0200,0000,0002 ; 8605 MEM WRITE, MEM_[FLG] U 3574, 2420,0111,0704,4170,4007,0700,0200,0023,1016 ; 8606 NEXT [ARX] PHYSICAL WRITE U 2420, 2614,3333,0014,4175,5007,0701,0210,0000,0002 ; 8607 =0* MEM WRITE, MEM_[PI], CALL [NEXT] U 2422, 3575,3333,0015,4175,5007,0701,0200,0000,0002 ; 8608 MEM WRITE, MEM_[XWD1] U 3575, 2421,0111,0704,4170,4007,0700,0200,0023,1016 ; 8609 NEXT [ARX] PHYSICAL WRITE U 2421, 2614,3333,0016,4175,5007,0701,0210,0000,0002 ; 8610 =0* MEM WRITE, MEM_[T0], CALL [NEXT] U 2423, 2424,3333,0017,4175,5007,0701,0200,0000,0002 ; 8611 MEM WRITE, MEM_[T1] U 2424, 2614,3771,0003,7274,4007,0701,0010,0000,0210 ; 8612 =0* [AR]_WORK[SV.VMA], CALL [NEXT] U 2426, 3576,3333,0003,4175,5007,0701,0200,0000,0002 ; 8613 MEM WRITE, MEM_[AR] U 3576, 3577,3771,0003,7274,4007,0701,0000,0000,0211 ; 8614 HSBDON: [AR]_WORK[SV.AR] U 3577, 3600,3771,0004,7274,4007,0701,0000,0000,0210 ; 8615 [ARX]_WORK[SV.VMA] U 3600, 3601,3443,0400,4174,4007,0700,0200,0000,0010 ; 8616 VMA_[ARX] ; 8617 [ARX]_WORK[SV.ARX], U 3601, 0006,3771,0004,7274,4004,1701,0000,0000,0212 ; 8618 RETURN [6] ; 8619 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 199 ; DSK: KSHACK; ITSPAG 98 20:01:24 16-JAN-87 WRITE HALT STATUS BLOCK ; 8620 ; -*- Fundamental -*- ; 8621 ; 8622 .TOC "ITS PAGE REFILL CODE" ; 8623 ; 8624 .IF/ITS ; 8625 ; 8626 CLEANUP DONE "END STATE, SKIP IRPT, J/PFTRAP" ; 8627 CLEANUP AND TRAP "[AR]_WORK[SV.VMA], SKIP/TRAP CYCLE, J/CLTRP" ; 8628 ; 8629 ;ITS page table entry: ; 8630 ; (when shifted left once the valid bit, cache bit, write bit and page ; 8631 ; number will be in the right place for loading the hardware.) ; 8632 PTE VALID/=<91> ;2.8 (internal to the microcode) ; 8633 PTE AGE/=<94> ;2.5 ; 8634 ALL=1 ; (actually a field of length 1) ; 8635 PTE WRITE/=<94> ;2.5 (internal to the microcode) ; 8636 PTE CACHE/=<95> ;2.4 ; 8637 PTE PAGE/=<98:107> ;2.1 - 1.1 ; 8638 ; 8639 ;Hardware page table control bits: ; 8640 PT VALID/=<90> ;2.9 ; 8641 PT WRITE/=<93> ;2.6 ; 8642 PT CACHE/=<94> ;2.5 ; 8643 PT PAGE/=<97:107> ;2.2 - 1.1 ; 8644 EVEN=3776 ; 8645 ALL=3777 ; 8646 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 200 ; DSK: KSHACK; ITSPAG 98 20:01:24 16-JAN-87 ITS PAGE REFILL CODE ; 8647 ; 8648 ; VMA flags: Page fail word flags: ; 8649 ;4.9 User mode User mode ; 8650 ;FORCE USER ; 8651 ;4.8 Exec mode Nonexistent IO register ; 8652 NONEXISTENT IO REGISTER/=<91> ;J/IOW5 ; 8653 ;4.7 Instruction fetch Nonexistent memory ; 8654 NONEXISTENT MEMORY/=<92> ;J/PFD ; 8655 ;4.6 Read Uncorrectable memory error ; 8656 UNCORRECTABLE MEMORY ERROR/=<93> ;J/PFD, J/BADDATA ; 8657 ;4.5 Write test ; 8658 ;WRITE TEST ; 8659 ;4.4 Write Memory write ; 8660 ;WRITE CYCLE ; 8661 ;4.3 2.9 from page table entry ; 8662 ;4.2 Don't cache 2.8 from page table entry ; 8663 PAGE ACCESS/=<96:97> ; 8664 ;4.1 Physical Physical ; 8665 ;PHYSICAL ; 8666 ;3.4 - 1.1 Address Address ; 8667 ADDRESS HIGH/=<104:107> ; 8668 MEMORY=3 ;20 bits of physical memory address. ; 8669 IO=17 ;22 bits of IO address. ; 8670 ALL=17 ; 8671 ; 8672 ; (These VMA flags only from DP:) ; 8673 ;3.8 IO cycle IO cycle ; 8674 ;IO CYCLE ; 8675 ;3.7 WRU cycle ; 8676 ;3.6 Vector cycle ; 8677 ;3.5 Byte cycle IO byte cycle ; 8678 ;IO BYTE ; 8679 ; 8680 ; (These VMA flags only from #:) ; 8681 ;3.9 - 3.7 XCTR control ; 8682 ;3.6 Hack for AREAD: DROM supplies 4.6 - 4.4 and 3.4 ; 8683 ;3.5 Ignore 4.9 - 3.7 from # and use 4.9 - 3.5 from DP instead. ; 8684 ;3.4 Load the VMA ; 8685 ;3.3 Extended address: Use 3.4 - 3.1 ; 8686 ;3.2 Wait: Start a cycle. ; 8687 ;3.1 Hack for BWRITE: DROM supplies 3.2 ; 8688 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 201 ; DSK: KSHACK; ITSPAG 98 20:01:24 16-JAN-87 ITS PAGE REFILL CODE ; 8689 ; 8690 .DCODE D 0257, 1215,1553,0100 ; 8691 257: IOT, AC, J/UUO257 ;Used to be MAP ; 8692 .UCODE ; 8693 ; 8694 1553: U 1553, 2605,4551,0202,4374,0007,0700,0000,0077,7740 ; 8695 UUO257: UUO ; 8696 ; 8697 ;The hardware comes here with a page fail or pending interrupt: ; 8698 3777: ; 8699 PAGE-FAIL: U 3777, 3602,3333,0003,7174,4007,0700,0400,0000,0211 ; 8700 WORK[SV.AR]_[AR] ; 8701 ;;INTERRUPT-TRAP macro (which nobody uses) does the above and comes ; 8702 ;;here: U 3602, 3603,3333,0004,7174,4007,0700,0400,0000,0212 ; 8703 ITRAP: WORK[SV.ARX]_[ARX] ;J/MVSKP U 3603, 3604,3333,0006,7174,4007,0700,0400,0000,0214 ; 8704 WORK[SV.BRX]_[BRX] U 3604, 3605,3771,0006,4354,4007,0700,0000,0000,0000 ; 8705 [BRX]_VMA ;BRX: FLAGS,,VMA ; 8706 WORK[SV.VMA]_[BRX], U 3605, 2440,3333,0006,7174,4007,0370,0400,0000,0210 ; 8707 SKIP IRPT ;See if interrupt (saves a dispatch) ; 8708 =0000 ; 8709 PFD: DBM/PF DISP, DBUS/DBM, ;Puts page fail condition on ; 8710 AD/D, DEST/PASS, 4T, ;DP 18-21. U 2440, 2440,3773,0000,4304,4003,1702,0000,0000,0000 ; 8711 DISP/DP LEFT, J/PFD ;Dispatch on it. ; 8712 =0001 WORK[SV.BR]_[BR], ;(1) Interrupt U 2441, 3613,3333,0005,7174,4007,0700,0400,0000,0213 ; 8713 J/PF-INT ; 8714 =0011 [BRX]_IO DATA, ;(3) Parity ; 8715 AD PARITY OK/0, ;Don't look at parity. U 2443, 3606,3771,0006,4374,4007,0700,0000,0000,0000 ; 8716 J/BADDATA ; 8717 =0101 [BRX]_[100000] XWD 0, ;(5) NXM U 2445, 3610,4571,1206,4374,4007,0700,0000,0010,0000 ; 8718 J/HARD ; 8719 =0111 [BRX]_[140000] XWD 0, ;(7) NXM & Parity U 2447, 3610,4571,1206,4374,4007,0700,0000,0014,0000 ; 8720 J/HARD ; 8721 =1000 WORK[SV.BR]_[BR], ;(10) Read-only page U 2450, 3622,3333,0005,7174,4007,0700,0400,0000,0213 ; 8722 J/PFMAP ; 8723 =1001 WORK[SV.BR]_[BR], ;[123] (11) 1 ms timer and movsrj U 2451, 3613,3333,0005,7174,4007,0700,0400,0000,0213 ; 8724 J/PF-INT ; 8725 =1010 WORK[SV.BR]_[BR], ;(12) Nonexistent page U 2452, 3622,3333,0005,7174,4007,0700,0400,0000,0213 ; 8726 J/PFMAP ; 8727 =1011 WORK[SV.BR]_[BR], ;(13) Exec/User mismatch U 2453, 3622,3333,0005,7174,4007,0700,0400,0000,0213 ; 8728 J/PFMAP ; 8729 = ; 8730 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 202 ; DSK: KSHACK; ITSPAG 98 20:01:24 16-JAN-87 ITS PAGE REFILL CODE ; 8731 ; 8732 ;Here is how a hard memory error is handled: ; 8733 BADDATA: U 3606, 3607,3333,0006,7174,4007,0700,0400,0000,0160 ; 8734 WORK[BADW0]_[BRX] ;Save bad word. U 3607, 3610,4571,1206,4374,4007,0700,0000,0004,0000 ; 8735 [BRX]_[040000] XWD 0 ; 8736 ;;I/O failures come here from J/IOW5 with 200000 in BRX: U 3610, 2430,3333,0005,7174,4007,0700,0400,0000,0213 ; 8737 HARD: WORK[SV.BR]_[BR] ;Finally save BR ; 8738 =0 [BR]_VMA, ;VMA for page fail word. U 2430, 3547,3771,0005,4354,4007,0700,0010,0000,0000 ; 8739 CALL [ABORT] ;Clear page fault condition. ; 8740 [BR]_[BR].AND.#, ;Save interesting flags: ; 8741 FORCE USER/1, PHYSICAL/1, ; 8742 IO CYCLE/1, IO BYTE/1, U 2431, 3611,4551,0505,4374,0007,0700,0000,0040,1237 ; 8743 ADDRESS HIGH/ALL, HOLD RIGHT U 3611, 3612,3111,0506,4174,4007,0700,0000,0000,0000 ; 8744 = [BRX]_[BRX].OR.[BR] ;BRX: Page fail word U 3612, 2502,4553,1300,4374,4007,0321,0000,0001,0000 ; 8745 PAGE FAIL TRAP ; 8746 ; 8747 ;Here is what happens when the initial dispatch on the page fail condition ; 8748 ;tells us an interrupt is pending: U 3613, 2434,4443,0000,4174,4007,0370,0000,0000,0000 ; 8749 PF-INT: SKIP IRPT ;Timer trap? ; 8750 =00 [AR]_WORK[TIME1], ;Yes: Get low word. ; 8751 SPEC/CLRCLK, ; Clear clock flag. U 2434, 3443,3771,0003,7274,4117,0701,0010,0000,0301 ; 8752 CALL [TOCK] ; Do the update. TOCK returns 2. U 2435, 2504,3771,0003,7274,4007,0611,0000,0000,0210 ; 8753 CLEANUP AND TRAP ;No: External interrupt. Jump away U 2436, 3614,4223,0000,4364,4277,0700,0200,0000,0010 ; 8754 ABORT MEM CYCLE ;Clear 1ms flags. ; 8755 = ; 8756 .IF/PCST ;Take a PC sample every millisecond U 3614, 3615,3771,0003,7274,4007,0701,0000,0000,0210 ; 8757 [AR]_WORK[SV.VMA] ;Recover VMA and flags U 3615, 2432,3771,0004,7274,4007,0521,0000,0000,0233 ; 8758 [ARX]_WORK[PCST], SKIP DP0 ;Skip if PC sampling is enabled U 2432, 3651,3771,0004,7274,4007,0701,0000,0000,0212 ; 8759 =0 [ARX]_WORK[SV.ARX], J/PAGE-CONTINUE1 ;Disabled or table full U 2433, 3616,3741,0105,4074,4007,0700,0000,0000,0000 ; 8760 [BR]_PC WITH FLAGS U 3616, 2454,4553,0300,4374,4007,0321,0000,0010,0000 ; 8761 TL [AR], FETCH/1 ;Skip if PC points at current instruction U 2454, 2455,1111,0705,4170,4007,0700,4000,0000,0000 ; 8762 =0 [BR]_[BR]-1, HOLD LEFT ;No, back up the PC that gets stored U 2455, 3617,0113,0415,7174,4007,0700,0400,0000,0233 ; 8763 WORK[PCST]_[ARX]+[XWD1] ;Increment the AOBJN pointer U 3617, 3620,5731,0004,4174,4007,0700,0000,0000,0000 ; 8764 [ARX] LEFT_0 ;Clear high bits of physical address damn it U 3620, 3621,3443,0400,4174,4007,0700,0200,0021,1016 ; 8765 VMA_[ARX], VMA PHYSICAL WRITE ;Store PC into sample table U 3621, 3650,3333,0005,4175,5007,0701,0200,0000,0002 ; 8766 MEM WRITE, MEM_[BR], J/PAGE-CONTINUE ; 8767 .IFNOT/PCST ; 8768 [AR]_WORK[SV.VMA], ;Restore VMA and continue where ; 8769 J/PAGE-CONTINUE ; we left off. ; 8770 .ENDIF/PCST ; 8771 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 203 ; DSK: KSHACK; ITSPAG 98 20:01:24 16-JAN-87 ITS PAGE REFILL CODE ; 8772 ; 8773 ;Here we handle a soft page failure. BRX contains VMA FLAGS,,VMA. U 3622, 3623,4223,0000,4364,4277,0700,0200,0000,0010 ; 8774 PFMAP: ABORT MEM CYCLE ;Clear page fail condition. U 3623, 2456,4553,0600,4374,4007,0321,0000,0002,0000 ; 8775 TL [BRX], WRITE TEST/1 ;Write test? ; 8776 =0 [BRX]_[BRX].OR.#, ;Yes: Turn into simple write. U 2456, 2457,3551,0606,4374,0007,0700,0000,0001,0000 ; 8777 WRITE CYCLE/1, HOLD RIGHT ; 8778 [BRX]_[BRX].AND.#, ;Save interesting flags: ; 8779 FORCE USER/1, WRITE CYCLE/1, PHYSICAL/1, U 2457, 3624,4551,0606,4374,0007,0700,0000,0041,1003 ; 8780 ADDRESS HIGH/MEMORY, HOLD RIGHT ; 8781 = [AR]_[BRX], ;Copy virtual address and U 3624, 2460,3441,0603,4174,4007,0700,2000,0071,0011 ; 8782 SC_9. ;prepare to shift 11 places. ; 8783 =0 ; 8784 PFMAP1: [AR]_[AR]*.5, ;Right adjust page # U 2460, 2460,3447,0303,4174,4007,0630,2000,0060,0000 ; 8785 STEP SC, J/PFMAP1 ; 8786 [AR]_[AR].AND.# CLR LH, ;AR: index off DBR U 2461, 3625,4251,0303,4374,4007,0700,0000,0000,0077 ; 8787 #/77 U 3625, 2462,3333,0006,4174,4007,0520,0000,0000,0000 ; 8788 = READ [BRX], SKIP DP0 ;User ref? ; 8789 =0 READ [BRX], SKIP DP18, ;Exec high ref? U 2462, 2466,3333,0006,4174,4007,0530,0000,0000,0000 ; 8790 J/EXEC-DBR ; 8791 READ [BRX], SKIP DP18, ;User high ref? U 2463, 2464,3333,0006,4174,4007,0530,0000,0000,0000 ; 8792 J/USER-DBR ; 8793 = ; 8794 ; 8795 =0 ; 8796 USER-DBR: ; 8797 [AR]_[AR]+WORK[DBR1], ;User low U 2464, 3626,0551,0303,7274,4007,0701,0000,0000,0215 ; 8798 J/GOTDBR ; 8799 [AR]_[AR]+WORK[DBR2], ;User high U 2465, 3626,0551,0303,7274,4007,0701,0000,0000,0216 ; 8800 J/GOTDBR ; 8801 = ; 8802 ; 8803 =0 ; 8804 EXEC-DBR: ; 8805 [AR]_[AR]+WORK[DBR4], ;Exec low U 2466, 3626,0551,0303,7274,4007,0701,0000,0000,0220 ; 8806 J/GOTDBR ; 8807 [AR]_[AR]+WORK[DBR3], ;Exec high U 2467, 3626,0551,0303,7274,4007,0701,0000,0000,0217 ; 8808 J/GOTDBR ; 8809 = ; 8810 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 204 ; DSK: KSHACK; ITSPAG 98 20:01:24 16-JAN-87 ITS PAGE REFILL CODE ; 8811 ; 8812 ;BRX: Original VMA FLAGS,,VMA modified as for a page fail word. ; 8813 ;AR: Address of page table word. U 3626, 3627,3443,0300,4174,4007,0700,0200,0024,1016 ; 8814 GOTDBR: VMA_[AR], START READ, VMA PHYSICAL U 3627, 3630,3771,0005,4365,5007,0700,0200,0000,0002 ; 8815 MEM READ, [BR]_MEM U 3630, 2470,4553,0600,4374,4007,0331,0000,0000,2000 ; 8816 TR [BRX], #/2000 ;Odd? ; 8817 =0 [ARX]_[BR], ;Yes: entry is in right half, just copy it U 2470, 3631,3441,0504,4174,4007,0700,0000,0000,0000 ; 8818 J/PTWRH ; into ARX. ; 8819 [ARX]_[BR] SWAP, ;No: entry is in left half, so copy in ARX U 2471, 3632,3770,0504,4344,4007,0700,0000,0000,0000 ; 8820 J/PTWLH ; is swapped first. ; 8821 = ; 8822 ; 8823 PTWRH: [BR]_[BR].AND.NOT.#, ;BR gets the word to write back with the ; 8824 PTE AGE/ALL, ; age bits cleared in the right half. ; 8825 HOLD LEFT, U 3631, 2472,5551,0505,4370,4007,0530,0000,0002,0000 ; 8826 SKIP DP18, J/PTWTST ;Test 2.9 of entry. ; 8827 ; 8828 PTWLH: [BR]_[BR].AND.NOT.#, ;BR gets the word to write back with the ; 8829 PTE AGE/ALL, ; age bits cleared in the left half. ; 8830 HOLD RIGHT, U 3632, 2472,5551,0505,4374,0007,0520,0000,0002,0000 ; 8831 SKIP DP0, J/PTWTST ;Test 2.9 of entry. ; 8832 ; 8833 =0 U 2472, 2474,4553,0400,4374,4007,0331,0000,0020,0000 ; 8834 PTWTST: TR [ARX], #/200000, J/PTWTS0 ;0X: Test 2.8 U 2473, 2476,4553,0400,4374,4007,0331,0000,0020,0000 ; 8835 TR [ARX], #/200000, J/PTWTS1 ;1X: Test 2.8 ; 8836 = ; 8837 ; 8838 =0 ; 8839 PTWTS0: [BRX]_[BRX].OR.#, ;01: Read only ; 8840 PAGE ACCESS/1, ;Indicate that in page fail word. ; 8841 HOLD RIGHT, U 2474, 3633,3551,0606,4374,0007,0700,0000,0000,2000 ; 8842 J/READ-ONLY U 2475, 2502,4553,1300,4374,4007,0321,0000,0001,0000 ; 8843 PAGE FAIL TRAP ;00: Not accessible. ; 8844 = ; 8845 ; 8846 =0 ; 8847 PTWTS1: [ARX]_[ARX].OR.#, ;11: Read/Write ; 8848 PTE WRITE/1, ;Set Writable bit in page table. ; 8849 HOLD LEFT, U 2476, 3634,3551,0404,4370,4007,0700,0000,0002,0000 ; 8850 J/PAGE-REFILL ; 8851 [BRX]_[BRX].OR.#, ;10: Read/Write/First ; 8852 PAGE ACCESS/2, ;Indicate that in page fail word. ; 8853 HOLD RIGHT, U 2477, 3633,3551,0606,4374,0007,0700,0000,0000,4000 ; 8854 J/READ-ONLY ; 8855 = ; 8856 ; 8857 READ-ONLY: ; 8858 TL [BRX], ;Were we perhaps trying to write? U 3633, 2500,4553,0600,4374,4007,0321,0000,0001,0000 ; 8859 WRITE CYCLE/1 U 2500, 2502,4553,1300,4374,4007,0321,0000,0001,0000 ; 8860 =0 PAGE FAIL TRAP ;That would be a problem wouldn't it! ; 8861 [ARX]_[ARX].AND.NOT.#, ;Clear writable bit in page table. ; 8862 PTE WRITE/1, ; 8863 HOLD LEFT, U 2501, 3634,5551,0404,4370,4007,0700,0000,0002,0000 ; 8864 J/PAGE-REFILL ; 8865 = ; 8866 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 205 ; DSK: KSHACK; ITSPAG 98 20:01:24 16-JAN-87 ITS PAGE REFILL CODE ; 8867 ; 8868 ;BRX: Original VMA FLAGS,,VMA modified as for a page fail word. ; 8869 ;AR: Address of page table word. ; 8870 ;ARX: Half formed page table entry in right half. ; 8871 ;BR: Original page table word with the age bit set. ; 8872 PAGE-REFILL: ; 8873 VMA_[AR], ;Prepare to put the word back. ; 8874 START WRITE, U 3634, 3635,3443,0300,4174,4007,0700,0200,0023,1016 ; 8875 VMA PHYSICAL ; 8876 MEM WRITE, ;Write it back. U 3635, 3636,3333,0005,4175,5007,0701,0200,0000,0002 ; 8877 MEM_[BR] U 3636, 3637,3771,0003,7274,4007,0701,0000,0000,0210 ; 8878 [AR]_WORK[SV.VMA] ;AR: For PAGE-CONTINUE to use. ; 8879 [BR]_[AR].AND.NOT.#, ;Clear bits which start a cycle. ; 8880 READ CYCLE/1, WRITE CYCLE/1, U 3637, 3640,5551,0305,4374,0007,0700,0000,0007,0000 ; 8881 WRITE TEST/1, HOLD RIGHT ; 8882 [BR]_[AR].AND.NOT.#, ;Make DEC page number even. U 3640, 3641,5551,0305,4370,4007,0700,0000,0000,1000 ; 8883 #/1000, HOLD LEFT U 3641, 3642,3443,0500,4174,4007,0701,0200,0000,0030 ; 8884 VMA_[BR], 3T, DP FUNC/1 ;Restore VMA and set User according to ; 8885 ;what it was. ; 8886 [ARX]_([ARX].OR.#)*2, ;Set Valid bit and shift into position. ; 8887 3T, PTE VALID/1, U 3642, 3643,3555,0404,4374,4147,0701,0000,0020,0000 ; 8888 LOAD PAGE TABLE ;Load page table on next instruction. ; 8889 [ARX]_[ARX].AND.# CLR LH, ;Mask out all but the correct ; 8890 PT VALID/1, PT WRITE/1, ; bits. Make the DEC physical U 3643, 3644,4251,0404,4374,4007,0700,0000,0046,3776 ; 8891 PT CACHE/1, PT PAGE/EVEN ; page number even. ; 8892 [BR]_[BR].OR.#, ;Make DEC page number in VMA odd. U 3644, 3645,3551,0505,4370,4007,0700,0000,0000,1000 ; 8893 #/1000, HOLD LEFT U 3645, 3646,3443,0500,4174,4007,0701,0200,0000,0030 ; 8894 VMA_[BR], 3T, DP FUNC/1 ;Restore VMA again for the odd page. ; 8895 [ARX]_[ARX].OR.#, ;Then the odd physical page. ; 8896 #/1, HOLD LEFT, U 3646, 3647,3551,0404,4370,4147,0700,0000,0000,0001 ; 8897 LOAD PAGE TABLE ;Load page table on next instruction. ; 8898 READ [ARX], U 3647, 3650,3333,0004,4174,4007,0700,0000,0000,0000 ; 8899 J/PAGE-CONTINUE ; 8900 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 206 ; DSK: KSHACK; ITSPAG 98 20:01:24 16-JAN-87 ITS PAGE REFILL CODE ; 8901 ; 8902 ;Return to interrupted microinstruction after a successful page table ; 8903 ;reload or a timer trap. AR should contain the right VMA to restart the ; 8904 ;memory cycle. ; 8905 PAGE-CONTINUE: U 3650, 3651,3771,0004,7274,4007,0701,0000,0000,0212 ; 8906 [ARX]_WORK[SV.ARX] ;Restore saved stuff ; 8907 PAGE-CONTINUE1: U 3651, 3652,3771,0005,7274,4007,0701,0000,0000,0213 ; 8908 [BR]_WORK[SV.BR] U 3652, 3653,3771,0006,7274,4007,0701,0000,0000,0214 ; 8909 [BRX]_WORK[SV.BRX] ; 8910 VMA_[AR], ;MAKE MEM REQUEST ; 8911 DP FUNC/1, 3T, ;FROM DATA PATH U 3653, 3654,3443,0300,4174,4007,0701,0200,0000,0032 ; 8912 WAIT/1 ;WAIT FOR PREVIOUS CYCLE TO ; 8913 ; COMPLETE. (NEED THIS TO ; 8914 ; START ANOTHER CYCLE) ; 8915 [AR]_WORK[SV.AR], U 3654, 0000,3771,0003,7274,4004,1701,0000,0000,0211 ; 8916 RETURN [0] ; 8917 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 207 ; DSK: KSHACK; ITSPAG 98 20:01:24 16-JAN-87 ITS PAGE REFILL CODE ; 8918 ; 8919 ;;; Here we have hair to back us out of an instruction in case we have to ; 8920 ;;; deliver a page fault or an interrupt. Think of it as micro PCLSRing. ; 8921 ;;; Anybody who comes to this page to deliver a page fault better have set ; 8922 ;;; up BRX to contain the right page fail word first. Cleanup handlers ; 8923 ;;; better not smash it either. ; 8924 ; 8925 ;PAGE FAIL TRAP macro does: ; 8926 ; TL [FLG], FLG.PI/1, ;PI cycle? ; 8927 ; J/PFT ; 8928 =0 U 2502, 2404,4751,1217,4374,4007,0700,0000,0000,0100 ; 8929 PFT: HALT [IOPF] ;Yes: IO Page Failure U 2503, 2504,3771,0003,7274,4007,0611,0000,0000,0210 ; 8930 CLEANUP AND TRAP ;No: deliver hard page fault. ; 8931 = ; 8932 ; 8933 ;CLEANUP AND TRAP macro does: ; 8934 ; [AR]_WORK[SV.VMA], ; 8935 ; SKIP/TRAP CYCLE, ;See if trap cycle. ; 8936 ; J/CLTRP ; 8937 =0 ; 8938 CLTRP: TL [AR], FETCH/1, ;Is this an instruction fetch? U 2504, 2506,4553,0300,4374,4007,0321,0000,0010,0000 ; 8939 J/CLTRP1 U 2505, 3655,3771,0003,7274,4007,0701,0000,0000,0425 ; 8940 [AR]_WORK[TRAPPC] ;This is a trap cycle. ; 8941 = READ [AR], LOAD FLAGS, ;Restore PC flags. U 3655, 3656,3333,0003,4174,4467,0700,0000,0000,0004 ; 8942 J/CLDISP ; 8943 ; 8944 =0 ; 8945 .IF/1PROC ;Fault/interrupt while in instruction fetch U 2506, 2510,4553,1300,4374,4007,0321,0000,0000,0200 ; 8946 CLTRP1: TL [FLG], FLG.2PROC/1, J/CLTRP2 ; 8947 .IFNOT/1PROC ; 8948 CLTRP1: CLEANUP DONE ;Instruction fetch: Everything is clean. ; 8949 .ENDIF/1PROC ; 8950 ;;Many things jump here to backup the PC and cleanup. U 2507, 3656,1111,0701,4170,4007,0700,4000,0000,0000 ; 8951 FIXPC: [PC]_[PC]-1, HOLD LEFT ; 8952 = ;;Many things jump here to cleanup. U 3656, 2520,3333,0013,4174,4003,5701,0000,0000,0000 ; 8953 CLDISP: READ [FLG], DBUS/DP, DISP/DP, 3T, J/CLEANUP ; 8954 ;;CLEANUP DISP macro (which nobody uses) does the above. ; 8955 ; 8956 .IF/1PROC ; 8957 =0 U 2510, 0751,5551,1313,4374,0007,0700,0000,0000,1200 ; 8958 CLTRP2: TAKE 1-PROCEED TRAP ;Take one-proceed trap instead of this one U 2511, 2512,4221,0013,4170,4007,0370,0000,0000,0000 ; 8959 CLEANUP DONE ; 8960 .ENDIF/1PROC ; 8961 ; 8962 =0000 ; 8963 CLEANUP: ;;Dispatch table to cleanup after a page fault or interrupt. ; 8964 CLEANED: ;;J/BLT-CLEANUP ;(0) Normal case: No more cleanup needed. U 2520, 2512,4221,0013,4170,4007,0370,0000,0000,0000 ; 8965 CLEANUP DONE ;Go deliver page fault or interrupt. ; 8966 =0001 [AR]_WORK[SV.ARX], ;(1) BLT U 2521, 3035,3771,0003,7274,4007,0701,0000,0000,0212 ; 8967 J/BLT-CLEANUP ; 8968 ;(2) Unused. ; 8969 =0011 STATE_[EDIT-SRC], ;(3) SRC IN STRING MOVE U 2523, 3353,3771,0013,4370,4007,0700,0000,0000,0011 ; 8970 J/STRPF ; 8971 =0100 STATE_[EDIT-DST], ;(4) DST IN STRING MOVE U 2524, 3353,3771,0013,4370,4007,0700,0000,0000,0012 ; 8972 J/STRPF ; 8973 =0101 STATE_[SRC], ;(5) SRC+DST IN STRING MOVE U 2525, 2162,3771,0013,4370,4007,0700,0000,0000,0003 ; 8974 J/BACKD ; 8975 =0110 STATE_[EDIT-DST], ;(6) FILL IN MOVSRJ U 2526, 3362,3771,0013,4370,4007,0700,0000,0000,0012 ; 8976 J/STRPF4 ; 8977 =0111 STATE_[EDIT-SRC], ;(7) DEC TO BIN U 2527, 3357,3771,0013,4370,4007,0700,0000,0000,0011 ; 8978 J/PFDBIN ; 8979 =1000 STATE_[EDIT-SRC], ;(10) SRC+DST IN COMP U 2530, 3351,3771,0013,4370,4007,0700,0000,0000,0011 ; 8980 J/CMSDST U 2531, 2160,4221,0013,4170,4007,0700,0000,0000,0000 ; 8981 =1001 END STATE, J/BACKS ;(11) EDIT SRC FAIL U 2532, 2162,4221,0013,4170,4007,0700,0000,0000,0000 ; 8982 =1010 END STATE, J/BACKD ;(12) EDIT DST FAIL ; 8983 =1011 STATE_[EDIT-SRC], ;(13) SRC+DST IN EDIT U 2533, 2162,3771,0013,4370,4007,0700,0000,0000,0011 ; 8984 J/BACKD ; 8985 = ; 8986 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 208 ; DSK: KSHACK; ITSPAG 98 20:01:24 16-JAN-87 ITS PAGE REFILL CODE ; 8987 ; 8988 ;CLEANUP DONE macro does: ; 8989 ; END STATE, SKIP IRPT, J/PFTRAP ; 8990 =0 ; 8991 PFTRAP: TR [PI], ;Here to deliver page fault after cleanup. ; 8992 PI.IP1/1, PI.IP2/1, ; This hack figures out what 3 locations to ; 8993 PI.IP3/1, PI.IP4/1, ; use to deliver the page fault. U 2512, 2514,4553,1400,4374,4007,0331,0000,0007,4000 ; 8994 J/PFTDSP U 2513, 2330,3551,1313,4374,0007,0700,0000,0001,0000 ; 8995 TAKE INTERRUPT ;Here to deliver interrupt after cleanup. ; 8996 ; J/PI after setting FLG.PI ; 8997 = ; 8998 ; 8999 =0 U 2514, 2516,4553,1400,4374,4007,0331,0000,0006,0000 ; 9000 PFTDSP: TR [PI], PI.IP1/1, PI.IP2/1, J/PFTDS1 U 2515, 2534,4553,1400,4374,4007,0331,0000,0000,3000 ; 9001 TR [PI], PI.IP5/1, PI.IP6/1, J/PFTDS0 ; 9002 =0 U 2516, 2536,4553,1400,4374,4007,0331,0000,0004,0000 ; 9003 PFTDS1: TR [PI], PI.IP1/1, J/PFTD11 U 2517, 2540,4553,1400,4374,4007,0331,0000,0001,0000 ; 9004 TR [PI], PI.IP3/1, J/PFTD10 ; 9005 =0 U 2534, 2542,4553,1400,4374,4007,0331,0000,0000,2000 ; 9006 PFTDS0: TR [PI], PI.IP5/1, J/PFTD01 U 2535, 2544,4553,1400,4374,4007,0331,0000,0000,0400 ; 9007 TR [PI], PI.IP7/1, J/PFTD00 ; 9008 =0 U 2536, 3657,4751,1203,4374,4007,0700,0000,0000,0443 ; 9009 PFTD11: [AR]_0 XWD [443], J/PFTRAP1 U 2537, 3657,4751,1203,4374,4007,0700,0000,0000,0446 ; 9010 [AR]_0 XWD [446], J/PFTRAP1 ; 9011 =0 U 2540, 3657,4751,1203,4374,4007,0700,0000,0000,0451 ; 9012 PFTD10: [AR]_0 XWD [451], J/PFTRAP1 U 2541, 3657,4751,1203,4374,4007,0700,0000,0000,0454 ; 9013 [AR]_0 XWD [454], J/PFTRAP1 ; 9014 =0 U 2542, 3657,4751,1203,4374,4007,0700,0000,0000,0457 ; 9015 PFTD01: [AR]_0 XWD [457], J/PFTRAP1 U 2543, 3657,4751,1203,4374,4007,0700,0000,0000,0462 ; 9016 [AR]_0 XWD [462], J/PFTRAP1 ; 9017 =0 U 2544, 3657,4751,1203,4374,4007,0700,0000,0000,0465 ; 9018 PFTD00: [AR]_0 XWD [465], J/PFTRAP1 U 2545, 3657,4751,1203,4374,4007,0700,0000,0000,0440 ; 9019 [AR]_0 XWD [440], J/PFTRAP1 ; 9020 = ; 9021 ; 9022 PFTRAP1: ; 9023 [AR]_[AR]+[EBR], ; Where to store PFW U 3657, 3660,0111,1003,4174,4007,0700,0200,0021,1016 ; 9024 VMA PHYSICAL WRITE ; 9025 MEM WRITE, ; Store PFW U 3660, 2172,3333,0006,4175,5007,0701,0200,0000,0002 ; 9026 MEM_[BRX] ; 9027 .IF/1PROC ; 9028 =0** NEXT [AR] PHYSICAL WRITE, ; Where to store old PC U 2172, 3661,0111,0703,4170,4007,0700,0210,0023,1016 ; 9029 CALL [STORE-INT-PC] ; 9030 .IFNOT/1PROC ; 9031 NEXT [AR] PHYSICAL WRITE ; Where to store old PC ; 9032 [BR]_PC WITH FLAGS ; Get old PC ; 9033 MEM WRITE, ; Store old PC ; 9034 MEM_[BR] ; 9035 .ENDIF/1PROC ; 9036 [AR]_[AR]+1, ; Where to get new PC ; 9037 VMA PHYSICAL READ, U 2176, 2611,0111,0703,4174,4007,0700,0200,0024,1016 ; 9038 J/GOEXEC ; 9039 ; 9040 .IF/1PROC ; 9041 STORE-INT-PC: U 3661, 3662,3741,0105,4074,4007,0700,0000,0000,0000 ; 9042 [BR]_PC WITH FLAGS ; Get old PC U 3662, 2546,4553,1300,4374,4007,0321,0000,0000,1000 ; 9043 TL [FLG], FLG.1PROC/1 ; Was the instruction being one-proceeded? ; 9044 =0 [BR]_[BR].OR.#, OIPBIT/1, ;It was, turn pc flag back on U 2546, 3663,3551,0505,4374,0007,0700,0000,0000,1000 ; 9045 HOLD RIGHT, J/STORE-INT-PC-2 ; 9046 STORE-INT-PC-1: U 2547, 0004,3333,0005,4175,5004,1701,0200,0000,0002 ; 9047 MEM WRITE, MEM_[BR], RETURN [4] ; 9048 STORE-INT-PC-2: ; 9049 [FLG]_[FLG].AND.NOT.#, FLG.1PROC/1, ;Clear 1-proceed flags U 3663, 2547,5551,1313,4374,0007,0700,0000,0000,1200 ; 9050 FLG.2PROC/1, HOLD RIGHT, J/STORE-INT-PC-1 ; 9051 .ENDIF/1PROC ; 9052 .ENDIF/ITS ; 9053 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 209 ; DSK: KSHACK; PAGEF 10 02:03:53 8-OCT-84 ITS PAGE REFILL CODE ; 9054 ;;;-*-Fundamental-*- ; 9055 ; 9056 .NOBIN ; 9057 .TOC "PAGE FAIL REFIL LOGIC" ; 9058 ; 9059 .IFNOT/ITS ; 9060 ; 9061 ;WHEN THE CPU CAN NOT COMPLETE A MEMORY REFERENCE BECAUSE THE PAGE ; 9062 ; TABLE DOES NOT CONTAIN VALID INFORMATION FOR THE VIRTUAL PAGE INVOLVED ; 9063 ; THE HARDWARE CALLS THIS ROUTINE TO RELOAD THE HARDWARE PAGE TABLE. ; 9064 ; ; 9065 ;THIS CODE WILL EITHER DO THE RELOAD OR GENERATE A PAGE FAIL FOR THE ; 9066 ; SOFTWARE. THE INFORMATION LOADED CONSISTS OF THE PHYSICAL PAGE NUMBER, ; 9067 ; THE CACHE ENABLE BIT AND THE WRITE ENABLE BIT. ; 9068 ; 9069 ;THIS LOGIC USES MANY VARIABLES. THEY ARE DESCRIBED BRIEFLY HERE: ; 9070 ; 9071 ;THING WHERE KEPT USE ; 9072 ;OLD VMA WORKSPACE WORD 210 SAVES VMA ; 9073 ;OLD AR WORKSPACE WORD 211 SAVES AR ; 9074 ;OLD ARX WORKSPACE WORD 212 SAVES ARX ; 9075 ;OLD BR WORKSPACE WORD 213 SAVES BR ; 9076 ;OLD BRX WORKSPACE WORD 214 SAVES BRX ; 9077 ;KL PAGING BIT EBR BIT 1 (IN 2901) INDICATES KL STYLE (TOPS-20) PAGING ; 9078 ; INSTEAD OF KI STYLE (TOPS-10 AND DIAGNOSTIC) ; 9079 ; MODE PAGING ; 9080 ;W BIT FLG BIT 4 PAGE CAN BE WRITTEN ; 9081 ;C BIT FLG BIT 6 DATA IN THIS PAGE MAY BE PUT ; 9082 ; INTO CACHE ; 9083 ;PI CYCLE FLG BIT 5 STORING OLD PC DURING PI ; 9084 ;MAP FLAG FLG BIT 18 MAP INSTRUCTION IN PROGRESS ; 9085 ;CLEANUP CODE FLG BITS 32-35 WHAT TO DO SO INSTRUCTION MAY BE ; 9086 ; RESTARTED ; 9087 ;SPT BASE WORKSPACE WORD 215 ADDRESS OF SHARED-POINTER-TABLE ; 9088 ;CST BASE WORKSPACE WORD 216 ADDRESS OF CORE-STATUS-TABLE ; 9089 ;CST MASK WORKSPACE WORD 217 BITS TO KEEP ON CST UPDATE ; 9090 ;CST DATA (PUR) WORKSPACE WORD 220 BITS TO SET ON CST UPDATE ; 9091 ;PAGE TABLE ADDRESS AR WHERE THIS PAGE TABLE IS LOCATED ; 9092 ;PHYSICAL PAGE # (PPN) AR RESULT OF THIS PROCESS ; 9093 ;CST ENTRY AR CORE STATUS TABLE ENTRY ; 9094 ;SPT ENTRY AR WORD FROM SPT ; 9095 ;PAGE TABLE ENTRY AR WORD FROM PT ; 9096 ;PAGE NUMBER BR INDEX INTO CURENT PAGE TABLE ; 9097 ;PAGE FAIL WORD BRX WHAT HAPPENED (ALSO MAP RESULT) ; 9098 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 210 ; DSK: KSHACK; PAGEF 10 02:03:53 8-OCT-84 PAGE FAIL REFIL LOGIC ; 9099 ; 9100 ; ; 9101 ; ; 9102 ; ; 9103 ; KL10 PAGING - WORD FORMATS ; 9104 ; ; 9105 ;Section Pointer ; 9106 ; ; 9107 ;The section pointer is found in the user or exec section table. ; 9108 ;(Part of UPT or EPT.) ; 9109 ; ; 9110 ;Section pointer provides (via the SPT) the physical address of ; 9111 ;the PAGE TABLE for the given section. ; 9112 ; ; 9113 ; Code: 0 No-access (trap) ; 9114 ; 1 Immediate ; 9115 ; 2 Share ; 9116 ; 3 Indirect ; 9117 ; 4-7 Unused, reserved ; 9118 ; ; 9119 ; 0 1 2 3 4 5 6 18 35 ; 9120 ; +----+-+-+-+-+---------+-------------------------+ ; 9121 ; !CODE!P!W! !C!/////////! PAGE TABLE IDENTIFIER ! ; 9122 ; !010 ! ! ! ! !/////////! (SPT INDEX) ! ; 9123 ; +----+-+-+-+-+---------+-------------------------+ ; 9124 ; ; 9125 ; NORMAL SECTION POINTER (Code = 2) ; 9126 ; ; 9127 ; 0 2 3 4 5 6 9 18 35 ; 9128 ; +----+-+-+-+-+---+-----------+------------------------+ ; 9129 ; !CODE!P!W! !C!///!SECTION !SECTION TABLE IDENTIFIER! ; 9130 ; !011 ! ! ! ! !///!TABLE INDEX! (SPT INDEX) ! ; 9131 ; +----+-+-+-+-+---+-----------+------------------------+ ; 9132 ; ; 9133 ; INDIRECT SECTION POINTER (Code = 3) ; 9134 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 211 ; DSK: KSHACK; PAGEF 10 02:03:53 8-OCT-84 PAGE FAIL REFIL LOGIC ; 9135 ; 9136 ;PAGE POINTERS ; 9137 ; ; 9138 ;FOUND IN PAGE TABLES ; 9139 ; ; 9140 ; 0 1 2 3 4 5 6 12 35 ; 9141 ; +----+-+-+-+-+----+------------------------------+ ; 9142 ; !CODE!P!W! !C!////! PHYSICAL ADDRESS OF PAGE ! ; 9143 ; !001 ! ! ! ! !////! ! ; 9144 ; +----+-+-+-+-+----+------------------------------+ ; 9145 ; ; 9146 ; IMMEDIATE POINTER (code field = 1) ; 9147 ; ; 9148 ; B12-35 give PHYSICAL ADDRESS OF PAGE ; 9149 ; if B12-17 >< 0, page not in core-trap ; 9150 ; if B12-17 = 0, B23-35 give CORE PAGE ; 9151 ; NUMBER of page, B18-22 MBZ ; 9152 ; ; 9153 ; ; 9154 ; ; 9155 ; ; 9156 ; ; 9157 ; 0 2 3 6 18 35 ; 9158 ; +-----+-------+---------+------------------------+ ; 9159 ; !CODE !SAME AS!/////////! SPT INDEX ! ; 9160 ; !010 ! IMMED.!/////////! ! ; 9161 ; +-----+-------+---------+------------------------+ ; 9162 ; ; 9163 ; SHARED POINTER (code field = 2) ; 9164 ; ; 9165 ; B18-35 Give SPT INDEX (SPTX). SPTX + SPT BASE ; 9166 ; ADDRESS = physical core address of word ; 9167 ; holding physical address of page. ; 9168 ; 9169 ; 0 1 2 3 6 9 17 18 35 ; 9170 ; +----+--------+---+-------+----------------------+ ; 9171 ; !CODE!SAME AS !///! PAGE ! PAGE TABLE IDENTIFIER! ; 9172 ; !011 ! IMMED. !///!NUMBER ! (SPT INDEX) ! ; 9173 ; +----+--------+---+-------+----------------------+ ; 9174 ; ; 9175 ; INDIRECT POINTER (code field = 3) ; 9176 ; ; 9177 ; This pointer type causes another pointer to be fetched ; 9178 ; and interpreted. The new pointer is found in word N ; 9179 ; (B9-17) of the page addressed by C(SPT + SPTX). ; 9180 ; ; 9181 ; ; 9182 ; ; 9183 ; SPT ENTRY ; 9184 ; ; 9185 ; Found in the SPT, i.e., when fetching C(SPT +SPTX) ; 9186 ; ; 9187 ; 12 35 ; 9188 ; +--------------------+---------------------------+ ; 9189 ; !////////////////////! PHYSICAL ADDRESS OF PAGE ! ; 9190 ; !////////////////////! OR PAGE TABLE ! ; 9191 ; +--------------------+---------------------------+ ; 9192 ; ; 9193 ; B12-35 Give PHYSICAL ADDRESS of page. ; 9194 ; ; 9195 ; The base address (physical core address) of the SPT ; 9196 ; resides in one AC of the reserved AC block. ; 9197 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 212 ; DSK: KSHACK; PAGEF 10 02:03:53 8-OCT-84 PAGE FAIL REFIL LOGIC ; 9198 ; 9199 ;PHYSICAL STORAGE ADDRESS ; 9200 ; ; 9201 ;Found in B12-35 of IMMEDIATE POINTERS and SPT ENTRIES. ; 9202 ; ; 9203 ; 12 17 18 23 35 ; 9204 ; +---------+----+-----------------+ ; 9205 ; ! !MBZ ! CORE PAGE NUMBER! ; 9206 ; ! ! ! IF B12-17 = 0 ! ; 9207 ; +---------+----+-----------------+ ; 9208 ; ; 9209 ; If B12-17 = 0, then B23-35 are CORE PAGE NUMBER (i.e., ; 9210 ; B14-26 of physical core address) of page and B18-22 ; 9211 ; MBZ. If B12-17 >< 0, then address is not core and ; 9212 ; pager traps. ; 9213 ; ; 9214 ; ; 9215 ; ; 9216 ;CORE STATUS TABLE ENTRY ; 9217 ; ; 9218 ;Found when fetching C(CBR + CORE PAGENO) ; 9219 ; ; 9220 ; 0 5 32 34 35 ; 9221 ; +-------+-------------------------------+------+-+ ; 9222 ; ! CODE ! ! !M! ; 9223 ; +-------+-------------------------------+------+-+ ; 9224 ; ; 9225 ; B0-5 are code field: ; 9226 ; ; 9227 ; 0 - unavailable, trap ; 9228 ; ; 9229 ; 1-77 - available ; 9230 ; ; 9231 ; ; 9232 ; ; 9233 ; B32-34 reserved for future hardware specification. ; 9234 ; ; 9235 ; B35 is "modified" bit, set on any write ref to page. ; 9236 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 213 ; DSK: KSHACK; PAGEF 10 02:03:53 8-OCT-84 PAGE FAIL REFIL LOGIC ; 9237 ; 9238 ;QUANTITIES IN HARDWARE REGISTERS ; 9239 ; ; 9240 ;SPT SPT Base Register ; 9241 ; ; 9242 ; 14 35 ; 9243 ; +--------------------------------+ ; 9244 ; ! PHYSICAL CORE WORD ADDRESS ! ; 9245 ; +--------------------------------+ ; 9246 ; ; 9247 ;CBR CST Base Register ; 9248 ; ; 9249 ; 14 35 ; 9250 ; +--------------------------------+ ; 9251 ; ! PHYSICAL CORE WORD ADDRESS ! ; 9252 ; +--------------------------------+ ; 9253 ; ; 9254 ;CSTMSK CST Update Mask ; 9255 ; ; 9256 ; 0 32 35 ; 9257 ; +------------------------------------------+---+-+ ; 9258 ; ! MASK !111!1! ; 9259 ; +------------------------------------------+---+-+ ; 9260 ; ; 9261 ; ANDed with CST word during update ; 9262 ; ; 9263 ;(B32-35 must be all 1's to preserve existing CST information) ; 9264 ; ; 9265 ;CSTDATA CST Update Data ; 9266 ; ; 9267 ; 0 32 34 35 ; 9268 ; +------------------------------------------+---+-+ ; 9269 ; ! DATA !000!0! ; 9270 ; +------------------------------------------+---+-+ ; 9271 ; ; 9272 ; IORed with CST word during update ; 9273 ; ; 9274 ;(B32-35 must be all 0's to preserve existing CST information) ; 9275 ; ; 9276 ;All unspecified bits and fields are reserved for future ; 9277 ;specification by DEC. ; 9278 ; ; 9279 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 214 ; DSK: KSHACK; PAGEF 10 02:03:53 8-OCT-84 PAGE FAIL REFIL LOGIC ; 9280 ; 9281 .BIN ; 9282 ; 9283 .DCODE ; 9284 257: IOT, AC, J/MAP ; 9285 .UCODE ; 9286 ; 9287 1553: ; 9288 MAP: [AR]_[AR].OR.#, ;ASSUME PHYSICAL REF ; 9289 #/160000, ;FAKE ANSWER (Set Accessible, Writable, ; 9290 HOLD RIGHT ;and "Software".) ; 9291 [BRX]_VMA ;PUT VMA AND FLAGS IN BRX ; 9292 [BRX]_[BRX].AND.#, ;JUST KEEP USER BIT ; 9293 #/400000, HOLD RIGHT ; .. ; 9294 WORK[SV.VMA]_[BRX] ;SAVE IN WORKSPACE ; 9295 [BR]_WORK[APR] ;GET APR FLAGS ; 9296 TR [BR], #/030000 ;PAGING ENABLED? ; 9297 =0 STATE_[MAP], J/PFMAP ;YES--DO REAL MAP ; 9298 AC_[AR], NEXT INST ;NO--RETURN VIRTUAL ADDRESS ; 9299 ;HARDWARE COMES HERE ON PAGE TABLE NOT VALID (OR INTERRUPT) WHEN ; 9300 ; STARTING A MEMORY REFERENCE. MICOWORD ADDRESS OF INSTRUCTION DOING ; 9301 ; MEM WAIT IS SAVED ON THE STACK. ; 9302 3777: ; 9303 PAGE-FAIL: ; 9304 WORK[SV.AR]_[AR] ; 9305 ITRAP: WORK[SV.BRX]_[BRX] ; 9306 [BRX]_VMA ; 9307 WORK[SV.VMA]_[BRX] ; 9308 WORK[SV.ARX]_[ARX], ; 9309 SKIP IRPT ;SEE IF INTERRUPT (SAVE DISPATCH) ; 9310 =0000 ; 9311 PFD: DBM/PF DISP, DBUS/DBM, ;BRING CODE TO 2901'S ; 9312 AD/D, DEST/PASS, 4T, ;PUT ON DP 18-21 ; 9313 DISP/DP LEFT, J/PFD ;DISPATCH ON IT ; 9314 =0001 ;(1) INTERRUPT ; 9315 WORK[SV.BR]_[BR], J/PFPI1 ; 9316 =0011 ;(3) BAD DATA FROM MEMORY ; 9317 [BRX]_IO DATA, ;GET THE BAD DATA ; 9318 AD PARITY OK/0, ; DO NOT LOOK AT PARITY ; 9319 J/BADDATA ;SAVE IN AC BLK 7 ; 9320 =0101 ;(5) NXM ERROR ; 9321 [BRX]_[370000] XWD 0, J/HARD ; 9322 =0111 ;(7) NXM & BAD DATA ; 9323 [BRX]_[370000] XWD 0, J/HARD ; 9324 =1000 ;(10) WRITE VIOLATION ; 9325 WORK[SV.BR]_[BR], J/PFMAP ; 9326 =1010 ;(12) PAGE NOT VALID ; 9327 WORK[SV.BR]_[BR], J/PFMAP ; 9328 =1011 ;(13) EXEC/USER MISMATCH ; 9329 WORK[SV.BR]_[BR], J/PFMAP ; 9330 = ; 9331 ; 9332 BADDATA: ; 9333 WORK[BADW0]_[BRX] ;SAVE BAD WORD ; 9334 WORK[BADW1]_[BRX] ;AGAIN ; 9335 [BRX]_[360000] XWD 0, J/HARD ; 9336 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 215 ; DSK: KSHACK; PAGEF 10 02:03:53 8-OCT-84 PAGE FAIL REFIL LOGIC ; 9337 ; 9338 ;WE HAVE SAVED AR, ARX, BR AND BRX. WE MERGE IN HERE FROM MAP ; 9339 ; INSTRUCTION, SAVE THE VMA AND START THE PAGE FAIL WORD. ; 9340 PFMAP: ABORT MEM CYCLE ;CLEAR PAGE FAIL ; 9341 [FLG]_[FLG].OR.#, ;PRESET W AND C TO 1 ; 9342 FLG.W/1, FLG.C/1, ;BITS INVOLVED ; 9343 HOLD RIGHT ;LEAVE RH ALONE ; 9344 TL [BRX], WRITE TEST/1 ;IS THIS A WRITE TEST? ; 9345 =0 [BRX]_[BRX].OR.#, ; 9346 #/10000, ; 9347 HOLD RIGHT ;YES--TURN INTO WRITE REF ; 9348 [BRX]_[BRX].AND.#, ;START PAGE FAIL WORD ; 9349 #/411000, ;SAVE 3 INTERESTING BITS ; 9350 HOLD RIGHT ;SAVE VIRTUAL ADDRESS ; 9351 ;USER ADDR (400000) ; 9352 ;WRITE REF (010000) ; 9353 ;PAGED REF (001000) ; 9354 [BRX]_[BRX].XOR.#, ;FIX BIT 8 ; 9355 #/1000, HOLD RIGHT ; 9356 [BR]_[BRX], ;COPY VIRTUAL ADDRESS ; 9357 SC_7 ;PREPARE TO SHIFT 9 PLACES ; 9358 =0 ; 9359 PF25: [BR]_[BR]*.5, ;RIGHT ADJUST PAGE # ; 9360 STEP SC, ;COUNT SHIFT STEPS ; 9361 J/PF25 ;LOOP FOR 9 ; 9362 [BR]_[BR].AND.# CLR LH, ;MASK TO 9 BITS ; 9363 #/777 ; .. ; 9364 TL [EBR], ;KI MODE REFILL? ; 9365 #/40 ;FLAG BIT ; 9366 =0 READ [BRX], ;USER REF? (KL MODE) ; 9367 SKIP DP0, ; .. ; 9368 J/PF30 ;CONTINUE AT PF30 ; 9369 [ARX]_[BR]*.5, ;KI10 MODE REFILL ; 9370 J/KIFILL ;GO HANDLE EASY CASE ; 9371 ; 9372 ;HERE IN TOPS-20 MODE ; 9373 ;PICK UP CORRECT SECTION POINTER ; 9374 =0 ; 9375 PF30: [ARX]_WORK[PTA.E], ;EXEC MODE ; 9376 SKIP AD.EQ.0, 4T, ;SEE IF VALID ; 9377 J/PF35 ;CONTINUE BELOW ; 9378 [ARX]_WORK[PTA.U], ;USER MODE ; 9379 SKIP AD.EQ.0, 4T ;SEE IF VALID ; 9380 =0 VMA_[ARX]+[BR], ;POINTER VALID ; 9381 VMA PHYSICAL READ, ;START MEMORY ; 9382 J/PF77 ;CONTINUE BELOW ; 9383 [AR]_[UBR]+#, 3T, ;USER MODE ; 9384 #/540, ;OFFSET TO UPT ; 9385 J/PF40 ;GO GET POINTER ; 9386 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 216 ; DSK: KSHACK; PAGEF 10 02:03:53 8-OCT-84 PAGE FAIL REFIL LOGIC ; 9387 ; 9388 =0 ; 9389 PF35: VMA_[ARX]+[BR], ;POINTER VALID ; 9390 VMA PHYSICAL READ, ;START MEMORY ; 9391 J/PF77 ;CONTINUE BELOW ; 9392 [AR]_[EBR]+#, 3T, ;EXEC MODE ; 9393 #/540 ;OFFSET TO EPT ; 9394 PF40: VMA_[AR], ;LOAD THE VMA ; 9395 START READ, ;START THE MEMORY CRANKING ; 9396 VMA PHYSICAL ;ABSOLUTE ADDRESS ; 9397 MEM READ, ;WAIT FOR MEMORY ; 9398 [AR]_MEM ;POINT POINTER IN AR ; 9399 ;LOOK AT SECTION POINTER AND DISPATCH ON TYPE ; 9400 =000 ; 9401 PF45: SC_7, ;FETCH SECTION 0 POINTER ; 9402 CALL [SETPTR] ;FIGURE OUT POINTER TYPE ; 9403 SECIMM: TL [AR], ;IMMEDIATE POINTER ; 9404 #/77, ;TEST FOR 12-17 = 0 ; 9405 J/PF50 ;CONTINUE AT PF50 ; 9406 [AR]_[AR]+WORK[SBR], ;SHARED SECTION ; 9407 J/SECSHR ;GO FETCH POINTER FROM SPT ; 9408 [AR]_[AR]+WORK[SBR], ;INDIRECT SECTION POINTER ; 9409 CALL [RDPT] ;GO FETCH SPT ENTRY ; 9410 =111 TL [AR], ;12 TO 17 = 0? ; 9411 #/77 ; .. ; 9412 = ; 9413 =0 PAGE FAIL TRAP ;NO ; 9414 [AR]_[AR]*2, ;FIRST SHIFT ; 9415 STEP SC ;SC WAS LOADED AT PF45 ; 9416 =0*0 ; 9417 PF60: [AR]_[AR]*2, ;CONVERT TO ADDRESS OF ; 9418 STEP SC, ; SECTION TABLE ; 9419 J/PF60 ; 9420 CALL [RDPT] ;READ SECTION TABLE ; 9421 =1*1 J/PF45 ;TRY AGAIN ; 9422 = ; 9423 ; 9424 ;HERE FOR SHARED SECTION. AR GETS THE ADDRESS OF PAGE TABLE ; 9425 =0** ; 9426 SECSHR: CALL [RDPT] ;READ WORD FROM SPT ; 9427 TL [AR], #/77 ;TEST FOR BITS 12-17 = 0 ; 9428 ; 9429 ;HERE WITH ADDRESS OF PAGE TABLE IN AR AND SKIP ON ; 9430 ; BITS 12 THRU 17 EQUAL TO ZERO ; 9431 =0 ; 9432 PF50: PAGE FAIL TRAP ;BITS 12-17 .NE. 0 ; 9433 [ARX]_[AR].AND.# CLR LH, ;PAGE NUMBER OF PAGE TABLE ; 9434 #/3777 ;11 BIT PHYSICAL PAGE # ; 9435 =0* [AR]_[ARX], ;COPY ADDRESS ; 9436 CALL [UPCST] ;UPDATE CST0 ; 9437 PF70: [AR]_[AR].OR.WORK[PUR] ;PUT IN NEW AGE AND ; 9438 ; USE BITS ; 9439 =0** START NO TEST WRITE, ;START MEMORY WRITE ; 9440 CALL [IBPX] ;GO STORE IN MEMORY ; 9441 SC_7 ;THIS CAN BE BUMMED ; 9442 =0 ; 9443 PF75: [ARX]_[ARX]*2, ;CONVERT PAGE NUMBER TO ; 9444 STEP SC, ; PAGE ADDRESS ; 9445 J/PF75 ;LOOP OVER 9 STEPS ; 9446 ; 9447 ;WE NOW HAVE THE ADDRESS OF THE PAGE TABLE ENTRY. GO ; 9448 ; READ IT AND START ANALYSIS ; 9449 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 217 ; DSK: KSHACK; PAGEF 10 02:03:53 8-OCT-84 PAGE FAIL REFIL LOGIC ; 9450 ; 9451 ;IF WE ARE HERE FOR THE FIRST TIME FOR THE USER OR EXEC SAVE THE ; 9452 ; ADDRESS OF THE PAGE TABLE IN PTA.E OR PTA.U SO THAT WE DO NOT ; 9453 ; HAVE TO DO THE SECTION LOOKUP EVERY TIME. ; 9454 READ [BRX], SKIP DP0 ;USER OR EXEC REF? ; 9455 =000 [AR]_WORK[PTA.E], ;EXEC MODE ; 9456 SKIP AD.EQ.0, 4T, ;SEE IF SET YET ; 9457 CALL [SHDREM] ;SHOULD WE REMEMBER PTR ; 9458 [AR]_WORK[PTA.U], ;USER MODE ; 9459 SKIP AD.EQ.0, 4T, ;SEE IF SET YET ; 9460 CALL [SHDREM] ;SHOULD WE REMEMBER PTR ; 9461 WORK[PTA.E]_[ARX], ;SAVE FOR EXEC ; 9462 J/PF76 ;CONTINUE BELOW ; 9463 WORK[PTA.U]_[ARX], ;SAVE FOR USER ; 9464 J/PF76 ;CONTINUE BELOW ; 9465 =111 ; 9466 PF76: VMA_[ARX]+[BR], ;READ PAGE POINTER ; 9467 START READ, ; 9468 VMA PHYSICAL ; 9469 = ; 9470 =00 ; 9471 PF77: MEM READ, ;START ANALYSIS OF POINTER ; 9472 [AR]_MEM, ; 9473 CALL [SETPTR] ; 9474 PTRIMM: TL [AR], ;IMMEDIATE POINTER ; 9475 #/77, ;CHECK FOR BITS 0-5 ; 9476 J/PF80 ;GO TO PF80 ; 9477 [AR]_[AR]+WORK[SBR], ;SHARED POINTER ; 9478 J/PTRSHR ;GO TO READ SPT ; 9479 ; 9480 ;INDIRECT POINTER. CHANGE PAGE # AND LOOK FOR PAGE TABLE ; 9481 PTRIND: [BR]_[AR] SWAP, ;PUT IN RIGHT HALF ; 9482 SKIP/-1 MS ;DID CLOCK GO OFF ; 9483 =0 WORK[SV.AR1]_[AR], ;YES--UPDATE CLOCK ; 9484 J/PFTICK ; .. ; 9485 [BR]_[BR].AND.# CLR LH, ;UPDATE PAGE # AND RESTART ; 9486 #/777, ;MASK FOR PAGE # ; 9487 SKIP IRPT ;SEE IF THIS IS A LOOP ; 9488 =0 [AR]_[AR].AND.#, ;CHANGE INDIRECT POINTER ; 9489 #/277000, ; INTO SHARE POINTER ; 9490 HOLD RIGHT, ; .. ; 9491 J/PF45 ;GO BACK AND TRY AGAIN ; 9492 PAGE FAIL TRAP ;POINTER LOOP ; 9493 ; 9494 =0** ; 9495 PTRSHR: CALL [RDPT] ;GO LOOK AT POINTER ; 9496 TL [AR], ;BITS 12-17 .EQ. 0? ; 9497 #/77 ; 9498 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 218 ; DSK: KSHACK; PAGEF 10 02:03:53 8-OCT-84 PAGE FAIL REFIL LOGIC ; 9499 ; 9500 ;HERE WITH FINAL POINTER. SKIP IF 12-17 NOT EQUAL TO ZERO ; 9501 =00 ; 9502 PF80: PAGE FAIL TRAP ;NO--TAKE A TRAP ; 9503 [ARX]_[AR].AND.# CLR LH,;SAVE PHYSICAL PAGE # ; 9504 #/3777, ;MASK TO 13 BITS ; 9505 CALL [UPCST] ;UPDATE CST0 ; 9506 ;HERE WE HAVE CST ENTRY IN AR, PAGE FAIL WORD IN BRX. GO LOOK ; 9507 ; AT WRITABLE AND WRITTEN BITS ; 9508 =11 ; 9509 PF90: [BRX]_[BRX].OR.#, ;TRANSLATION IS VALID ; 9510 #/100000, HOLD RIGHT ; .. ; 9511 TL [FLG], FLG.W/1 ;IS THIS PAGE WRITABLE? ; 9512 =0 [BRX]_[BRX].OR.#, ;YES--INDICATE THAT IN PFW ; 9513 #/020000, ; 9514 J/PF100 ;NOT WRITE VIOLATION ; 9515 TL [BRX], ;IS THIS A WRITE REF? ; 9516 WRITE TEST/1, WRITE CYCLE/1 ; 9517 =0 PAGE FAIL TRAP ;WRITE VIOLATION ; 9518 PF107: [AR]_[AR].OR.WORK[PUR], ;PUT IN NEW AGE ; 9519 J/PF110 ;GO TO STORE CST ENTRY ; 9520 ; 9521 =0* ; 9522 PFTICK: [AR]_WORK[TIME1], ;UPDATE TIMER ; 9523 SPEC/CLRCLK, CALL [TOCK] ; 9524 [AR]_WORK[SV.AR1], ;RESTORE AR ; 9525 J/PTRIND ;GO TRY AGAIN ; 9526 ; 9527 ;HERE IF PAGE IS WRITABLE ; 9528 PF100: TL [BRX], WRITE CYCLE/1 ;IS THIS A WRITE REF? ; 9529 =0 [AR]_[AR].OR.#, ;YES--SET WRITTEN BIT ; 9530 #/1, ; 9531 HOLD LEFT, ; 9532 J/PF105 ; 9533 TR [AR], ;NOT WRITE, ALREADY WRITTEN? ; 9534 #/1 ; 9535 =0 ; 9536 PF105: [BRX]_[BRX].OR.#, ;WRITTEN SET BIT ; 9537 #/040000, ;MARK PAGE AS ; 9538 HOLD RIGHT, ;WRITABLE ; 9539 J/PF107 ;STORE CST WORD ; 9540 [FLG]_[FLG].AND.NOT.#, ;NOT WRITTEN, CAUSE TRAP ON ; 9541 FLG.W/1, ; WRITE ATTEMPT ; 9542 HOLD RIGHT, ;ONLY CLEAR LH ; 9543 J/PF107 ; 9544 =0** ; 9545 PF110: START NO TEST WRITE, ; 9546 CALL [IBPX] ;STORE CST ENTRY ; 9547 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 219 ; DSK: KSHACK; PAGEF 10 02:03:53 8-OCT-84 PAGE FAIL REFIL LOGIC ; 9548 ; 9549 ;HERE WHEN WE HAVE FIGURED OUT PHYSICAL ADDRESS (IN ARX) AND FLAGS ; 9550 ; (IN BRX) RELOAD PAGE TABLE. ; 9551 PFDONE: TR [FLG], ;MAP INSTRUCTION? ; 9552 #/400000 ; 9553 =0 [AR]_[ARX], ;GET PHYSCIAL PAGE # ; 9554 SC_7, ;PREPARE TO CONVERT TO ; 9555 J/PF130 ; WORD ADDRESS ; 9556 [AR]_WORK[SV.VMA],;RESTORE VMA ; 9557 J/PF120 ; 9558 =0 ; 9559 PF130: [AR]_[AR]*2, ;CONVERT TO WORD # ; 9560 STEP SC, ; 9561 J/PF130 ; 9562 [AR]_[AR].AND.#, ;JUST ADDRESS BITS ; 9563 #/3, ; 9564 HOLD RIGHT ; 9565 END MAP ;CLEAR MAP FLAGS ; 9566 [BRX]_[BRX].OR.#, ;TURN ON THE TRANSLATION ; 9567 #/100000, ; VALID BIT ; 9568 HOLD RIGHT ; IN LEFT HALF ONLY ; 9569 TL [FLG], FLG.C/1 ;CACHE BIT SET? ; 9570 =0 [BRX]_[BRX].OR.#, ;YES--SET IN MAP WORD ; 9571 #/002000, HOLD RIGHT ; .. ; 9572 [BRX]_[BRX].AND.#, ;PRESERVE WORD # ; 9573 #/777, HOLD LEFT ; IN PAGE FAIL WORD ; 9574 [AR]_[AR].OR.[BRX], ;COMPLETE MAP INSTRUCTION ; 9575 EXIT ; 9576 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 220 ; DSK: KSHACK; PAGEF 10 02:03:53 8-OCT-84 PAGE FAIL REFIL LOGIC ; 9577 ; 9578 PF120: [BR]_[AR] ;COPY PAGE FAIL WORD ; 9579 [BR]_[AR].AND.NOT.#, ;CLEAR BITS WHICH START A CYCLE ; 9580 READ CYCLE/1, ; .. ; 9581 WRITE CYCLE/1, ; .. ; 9582 WRITE TEST/1, ; .. ; 9583 HOLD RIGHT ;JUST DO LEFT HALF ; 9584 VMA_[BR], 3T, ;RESTORE VMA ; 9585 DP FUNC/1 ;SET USER ACCORDING TO WHAT IT WAS ; 9586 [ARX]_[ARX].AND.# CLR LH, ;JUST KEEP PAGE # ; 9587 #/3777 ; .. ; 9588 [BRX]_[ARX].OR.#, #/400000 ;SET VALID BITS ; 9589 TL [FLG], FLG.W/1 ;WANT WRITE SET? ; 9590 =0 [BRX]_[BRX].OR.#, #/040000 ;SET WRITE BIT ; 9591 TL [FLG], FLG.C/1, ;WANT CACHE SET? ; 9592 LOAD PAGE TABLE ;LOAD PAGE TABLE ON NEXT ; 9593 ; MICRO INSTRUCTION ; 9594 =0 [BRX]_[BRX].OR.#, ;SET CACHE BIT ; 9595 #/020000, J/PF125 ;CACHE BIT ; 9596 READ [BRX] ;LOAD PAGE TABLE ; 9597 PF125: [ARX]_WORK[SV.ARX] ; 9598 [BR]_WORK[SV.BR] ; 9599 [BRX]_WORK[SV.BRX] ; 9600 VMA_[AR], ;MAKE MEM REQUEST ; 9601 DP FUNC/1, 3T, ;FROM DATA PATH ; 9602 WAIT/1 ;WAIT FOR PREVIOUS CYCLE TO ; 9603 ; COMPLETE. (NEED THIS TO ; 9604 ; START ANOTHER CYCLE) ; 9605 [AR]_WORK[SV.AR], ; 9606 RETURN [0] ; 9607 ;SUBROUTINE TO START CST UPDATE ; 9608 ;CALL WITH: ; 9609 ; AR/ PHYSICAL PAGE NUMBER ; 9610 ;RETURN 2 WITH ENTRY IN AR, PAGE FAIL IF AGE TOO SMALL ; 9611 =0** ; 9612 UPCST: [AR]_[AR]+WORK[CBR], ;ADDRESS OF CST0 ENTRY ; 9613 CALL [RDPT] ;READ OLD VALUE ; 9614 TL [AR], ;0 - 5 = 0? ; 9615 #/770000 ; .. ; 9616 =0 [AR]_[AR].AND.WORK[CSTM], ;CLEAR AGE FIELD ; 9617 RETURN [2] ;AGE IS NOT ZERO ; 9618 PAGE FAIL TRAP ;AGE TOO SMALL ; 9619 ; 9620 ;SUBROUTINE TO LOOK AT PAGE POINTER ; 9621 ;CALL WITH POINTER IN AR ; 9622 ;RETURNS 1 IF TYPE 1 ; 9623 ;RETURNS 2 IF TYPE 2 ; 9624 ;RETURNS 3 IF TYPE 3 ; 9625 ;GOES TO PFT IF TYPE 0 OR 4 THRU 7 ; 9626 SETPTR: [ARX]_[AR].OR.#, ;AND C AND W BITS ; 9627 #/753777 ; OF ALL POINTERS ; 9628 [FLG]_[FLG].AND.[ARX], ; .. ; 9629 HOLD RIGHT ;KEEP IN LH OF FLG ; 9630 READ [AR], ;TYPE 4,5,6 OR 7? ; 9631 SKIP DP0 ; .. ; 9632 =0 TL [AR], ;HERE WE TEST FOR TYPE ; 9633 #/300000, ; ZERO POINTER ; 9634 J/STPTR1 ;CHECK AT STPTR1 ; 9635 PAGE FAIL TRAP ;BAD TYPE ; 9636 =0 ; 9637 STPTR1: TL [AR], ;NOT ZERO ; 9638 #/100000, ;SEPERATE TYPE 2 ; 9639 J/STPTR2 ; .. ; 9640 PAGE FAIL TRAP ;TYPE 0 ; 9641 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 221 ; DSK: KSHACK; PAGEF 10 02:03:53 8-OCT-84 PAGE FAIL REFIL LOGIC ; 9642 ; 9643 =0 ; 9644 STPTR2: TL [AR], ;SEPERATE TYPE 1 ; 9645 #/200000, ; AND 3 ; 9646 J/STPTR3 ; .. ; 9647 RETURN [2] ;TYPE 2 ; 9648 ; 9649 =0 ; 9650 STPTR3: RETURN [3] ;TYPE 3 ; 9651 RETURN [1] ;TYPE 1 ; 9652 ; 9653 ;SUBROUTINE TO FETCH A PAGE POINTER OR CST ENTRY ; 9654 ;CALL WITH ADDRESS IN AR ; 9655 ;RETURN 4 WITH WORD IN AR ; 9656 ; ; 9657 RDPT: VMA_[AR], ;LOAD THE VMA ; 9658 START READ, ;START MEM CYCLE ; 9659 VMA PHYSICAL, ;ABSOLUTE ADDRESS ; 9660 SKIP IRPT ;CHECK FOR INTERRUPTS ; 9661 =0 MEM READ, ;NO INTERRUPTS ; 9662 [AR]_MEM, ;PUT THE DATA INTO AR ; 9663 RETURN [4] ;AND RETURN ; 9664 PAGE FAIL TRAP ;INTERRUPT ; 9665 ; 9666 ; 9667 ;SUBROUTINE TO SEE IF WE SHOULD REMEMBER AN EXEC SECTION PTR ; 9668 ;CALL WITH SKIP ON ADR.EQ.0 ; 9669 ;RETURNS 2 IF WE SHOULD STORE AND 7 IF WE SHOULD NOT ; 9670 ; ; 9671 =0 ; 9672 SHDREM: RETURN [7] ;INDIRECT PTR ; 9673 [AR]_.NOT.[FLG] ;FLIP BITS ; 9674 TL [AR], FLG.W/1, FLG.C/1 ;BOTH BITS SET ; 9675 =0 RETURN [7] ;NO--DON'T STORE ; 9676 RETURN [2] ;STORE ; 9677 ; 9678 ;HERE IN KI10 MODE ; 9679 ;BR CONTAINS PAGE # AND ARX CONTAINS PAGE #/2 ; 9680 ; 9681 KIFILL: READ [BRX], ;USER REF? ; 9682 SKIP DP0 ; .. ; 9683 =0 [BR]-#, ;EXEC--LESS THAN 340? ; 9684 #/340, ; .. ; 9685 SKIP DP18, 4T, ; .. ; 9686 J/KIF10 ;FOLLOW EXEC PATH ; 9687 KIUPT: [ARX]_[ARX]+[UBR], ;POINTER TO PAGE MAP ENTRY ; 9688 LOAD VMA, ;PUT ADDRESS IN VMA ; 9689 VMA PHYSICAL, ;ABSOLUTE ADDRESS ; 9690 START READ, ;FETCH UPT WORD ; 9691 J/KIF30 ;JOIN COMMON CODE ; 9692 =0 ; 9693 KIF10: [BR]-#, ;EXEC ADDRESS .GE. 340 ; 9694 #/400, ; SEE IF .GT. 400 ; 9695 SKIP DP18, 4T, ; .. ; 9696 J/KIEPT ;LOOK AT KIF20 ; 9697 [ARX]_[ARX]+#, 3T, ;EXEC ADDRESS .LT. 340 ; 9698 #/600, ;IN EBR+600 ; 9699 J/KIEPT ;JOIN COMMON CODE ; 9700 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 222 ; DSK: KSHACK; PAGEF 10 02:03:53 8-OCT-84 PAGE FAIL REFIL LOGIC ; 9701 ; 9702 =0 ; 9703 KIEPT: [ARX]_[ARX]+[EBR], ;ADD OFFSET TO ; 9704 LOAD VMA, ; EPT ; 9705 START READ, ;START FETCH ; 9706 VMA PHYSICAL, ;ABSOLUTE ADDRESS ; 9707 J/KIF30 ;GO GET POINTER ; 9708 [ARX]_[ARX]+#, ;PER PROCESS PAGE ; 9709 #/220, 3T, ; IS IN UPT + 400 ; 9710 J/KIUPT ;JOIN COMMON CODE ; 9711 KIF30: MEM READ, ;WAIT FOR DATA ; 9712 [ARX]_MEM ;PLACE IT IN ARX ; 9713 TR [BR], ;SEE IF EVEN OR ODD ; 9714 #/1 ; .. ; 9715 ; 9716 =0 ; 9717 KIF40: READ [ARX], ;ODD ; 9718 SKIP DP18, ;SEE IF VALID ; 9719 J/KIF50 ;JOIN COMMON CODE ; 9720 [ARX]_[ARX] SWAP, ;EVEN--FLIP AROUND ; 9721 J/KIF40 ; AND CONTINUE ; 9722 ; 9723 =0 ; 9724 KIF50: PAGE FAIL TRAP ; 9725 ;AT THIS POINT WE HAVE THE PAGE MAP ENTRY IN RH OF AR ; 9726 [FLG]_[FLG].AND.NOT.#, ;CLEAR W AND C ; 9727 FLG.W/1, FLG.C/1 ; FLAGS ; 9728 TR [ARX], #/020000 ;CACHE ENABLED? ; 9729 =0 [FLG]_[FLG].OR.#, ;SET CACHE BITS ; 9730 FLG.C/1, HOLD RIGHT ; .. ; 9731 TR [ARX], #/040000 ;DO NOT CACHE ; 9732 ;SEE IF CACHE BIT SET ; 9733 =0 [BRX]_[BRX].OR.#, ;COPY BITS TO BRX ; 9734 #/020000, ; 9735 HOLD RIGHT ; 9736 TR [ARX], ; .. ; 9737 #/100000 ; 9738 =0 [FLG]_[FLG].OR.#, ;SAVE W ; 9739 FLG.W/1, ; .. ; 9740 HOLD RIGHT, ; .. ; 9741 J/KIF90 ;ALL DONE ; 9742 TL [BRX], ;W=0, WRITE REF? ; 9743 WRITE CYCLE/1 ; 9744 =0 ; 9745 KIF80: [BRX]_[BRX].OR.#, ;WRITE FAILURE ; 9746 #/100000, HOLD RIGHT, ;INDICATE THAT ACCESS WAS ON ; 9747 J/KIF50 ;GO PAGE FAIL ; 9748 J/PFDONE ;ALL DONE ; 9749 ; 9750 KIF90: [BRX]_[BRX].OR.#, ;PAGE IS WRITABLE ; 9751 #/40000, ;TURN ON IN BRX ; 9752 J/PFDONE ;ALL SET ; 9753 ; 9754 ;HERE ON HARD PAGE FAILURES ; 9755 HARD: WORK[SV.BR]_[BR] ;SAVE BR (CLEANUP MAY NEED IT) ; 9756 =0 [BR]_VMA, ;BUILD PAGE FAIL WORD ; 9757 CALL [ABORT] ;CLEAR ERROR ; 9758 [BR]_[BR].AND.#, ;SAVE THE FLAGS ; 9759 #/401237, ; .. ; 9760 HOLD RIGHT ; .. ; 9761 [BRX]_[BRX].OR.[BR], ;COMPLETE PAGE FAIL WORD ; 9762 J/KIF50 ;GO TRAP ; 9763 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 223 ; DSK: KSHACK; PAGEF 10 02:03:53 8-OCT-84 PAGE FAIL REFIL LOGIC ; 9764 ; 9765 PFPI1: SKIP IRPT ;TIMER TRAP? ; 9766 =00 ; 9767 [AR]_WORK[TIME1], ;YES--GET LOW WORD ; 9768 SPEC/CLRCLK, ;CLEAR CLOCK FLAG ; 9769 CALL [TOCK] ;DO THE UPDATE ; 9770 J/PFT1 ;EXTERNAL INTERRUPT ; 9771 ABORT MEM CYCLE ;CLEAR 1MS FLAGS ; 9772 = ; 9773 PFPI2: [AR]_WORK[SV.VMA], ;RESTORE VMA ; 9774 J/PF125 ; 9775 ; 9776 ; 9777 ;HERE ON PAGE FAIL TRAP ; 9778 =0 ; 9779 PFT: HALT [IOPF] ;IO PAGE FAILURE ; 9780 PFT1: [AR]_WORK[SV.VMA], ; 9781 SKIP/TRAP CYCLE ;SEE IF TRAP CYCLE ; 9782 =0 TL [AR], FETCH/1, ;IS THIS AN INSTRUCTION FETCH ; 9783 J/PFT1A ;GO LOOK BELOW ; 9784 [AR]_WORK[TRAPPC] ;RESTORE PC ; 9785 READ [AR], LOAD FLAGS, J/CLDISP ; 9786 =0 ; 9787 PFT1A: J/CLEANED ;YES--NO PC TO BACK UP ; 9788 FIXPC: [PC]_[PC]-1, HOLD LEFT ;DATA FAILURE--BACKUP PC ; 9789 =0 ; 9790 CLDISP: CLEANUP DISP ;GO CLEANUP AFTER PAGE FAIL ; 9791 =0000 ; 9792 CLEANUP: ; 9793 CLEANED: ;(0) NORMAL CASE ; 9794 END STATE, SKIP IRPT, ;NO MORE CLEANUP NEEDED ; 9795 J/PFT2 ;HANDLE PAGE FAIL OR INTERRUPT ; 9796 [AR]_WORK[SV.ARX], ;(1) BLT ; 9797 J/BLT-CLEANUP ; 9798 [PC]_[PC]+1, ;(2) MAP ; 9799 J/MAPDON ; 9800 STATE_[EDIT-SRC], ;(3) SRC IN STRING MOVE ; 9801 J/STRPF ; 9802 STATE_[EDIT-DST], ;(4) DST IN STRING MOVE ; 9803 J/STRPF ; 9804 STATE_[SRC], ;(5) SRC+DST IN STRING MOVE ; 9805 J/BACKD ; 9806 STATE_[EDIT-DST], ;(6) FILL IN MOVSRJ ; 9807 J/STRPF4 ; 9808 STATE_[EDIT-SRC], ;(7) DEC TO BIN ; 9809 J/PFDBIN ; 9810 STATE_[EDIT-SRC], ;(10) SRC+DST IN COMP ; 9811 J/CMSDST ; 9812 END STATE, J/BACKS ;(11) EDIT SRC FAIL ; 9813 END STATE, J/BACKD ;(12) EDIT DST FAIL ; 9814 STATE_[EDIT-SRC], ;(13) SRC+DST IN EDIT ; 9815 J/BACKD ; 9816 = ; 9817 î ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 224 ; DSK: KSHACK; PAGEF 10 02:03:53 8-OCT-84 PAGE FAIL REFIL LOGIC ; 9818 ; 9819 =0 ; 9820 PFT2: [AR]_[UBR]+#, ;PREPARE TO STORE PFW ; 9821 #/500, 3T, ; 9822 J/PFT10 ; 9823 PFT3: TAKE INTERRUPT ;PROCESS INTERRUPT ; 9824 PFT10: VMA_[AR], ;WHERE TO STORE PFW ; 9825 VMA PHYSICAL WRITE ; 9826 =0 MEM WRITE, ;STORE PFW ; 9827 MEM_[BRX], ; 9828 CALL [NEXTAR] ;ADVANCE POINTER TO ; 9829 ;PREPARE TO STORE PC ; 9830 TL [EBR], #/400000 ;KL PAGING? ; 9831 =0 [BR]_FLAGS,J/EAPF ;YES--DO EXTENDED THING ; 9832 [BR]_PC WITH FLAGS ;GET OLD PC ; 9833 MEM WRITE, ;STORE OLD PC ; 9834 MEM_[BR], ; 9835 J/EAPF1 ; 9836 ; 9837 MAPDON: END STATE, ;CLEAR MAP BIT ; 9838 SKIP IRPT ;ANY INTERRUPT? ; 9839 =0 [AR]_[BRX], ;RETURN PAGE FAIL WORD ; 9840 EXIT ; 9841 [PC]_[PC]-1, J/PFT3 ;INTERRUPTED OUT OF MAP ; 9842 ; RETRY INSTRUCTION ; 9843 ; 9844 ; 9845 =0 ; 9846 EAPF: MEM WRITE, MEM_[BR], ;STORE FLAGS ; 9847 CALL [NEXTAR] ;STORE PC WORD ; 9848 MEM WRITE, MEM_[PC] ; .. ; 9849 EAPF1: [AR]_[AR]+1, ; 9850 VMA PHYSICAL READ, ; 9851 J/GOEXEC ; 9852 ; 9853 NEXTAR: NEXT [AR] PHYSICAL WRITE, RETURN [1] ; 9854 ; 9855 .ENDIF/ITS ; 9856 ; Number of Micro Words used: ; D Words= 512 ; U Words= 1980 END ; DSK: KSHACK; ITS MCR 22:17:29 16-JAN-87 MICRO 116 KS10 MICROCODE FOR ITS PAGE 225 ; CROSS REFERENCE LISTING (U) A 707 # AR 711 # 2579 2618 2648 2649 2714 2763 2771 2914 2916 2919 2922 2925 2928 3014 3024 3039 3056 3067 3077 3087 3118 3129 3139 3178 3190 3197 3201 3212 3213 3215 3217 3218 3226 3249 3250 3513 3518 3520 3532 3535 3538 3543 3544 3615 3633 3635 3701 3704 3774 3775 3781 3802 3850 3865 3902 3913 3938 4003 4027 4032 4068 4113 4117 4125 4127 4294 4299 4332 4368 4382 4399 4410 4413 4416 4431 4458 4459 4464 4482 4498 4518 4634 4643 4648 4658 4664 4683 4687 4706 4734 4738 4740 4741 4761 4793 4796 4799 4813 4839 4856 4857 4862 4867 4875 4877 4879 4952 4962 4964 4969 4970 5016 5022 5032 5036 5076 5080 5084 5088 5268 5281 5368 5372 5384 5387 5393 5399 5439 5520 5523 5622 5628 5632 5633 5664 5670 5690 5696 5697 5698 5699 5708 5713 5734 5735 5747 5749 5758 5759 5780 5785 5786 5792 5828 5832 5834 5837 5840 5844 5846 5848 5850 5851 5852 5853 5859 5861 5862 5870 5875 5892 5918 5926 5931 5933 5978 5991 6010 6019 6023 6039 6053 6055 6057 6063 6091 6098 6101 6112 6115 6123 6125 6129 6134 6136 6152 6157 6160 6182 6185 6186 6190 6310 6314 6318 6325 6336 6346 6361 6382 6387 6400 6403 6429 6515 6522 6539 6561 6575 6602 6613 6614 6615 6628 6663 6693 6704 6742 6757 6785 6790 6820 6821 6822 6823 6825 6826 6829 6834 6885 6908 6916 6917 6943 6982 6994 6995 7003 7024 7027 7030 7034 7035 7037 7041 7043 7099 7100 7105 7106 7114 7117 7121 7190 7213 7219 7239 7258 7262 7265 7266 7267 7268 7290 7316 7317 7321 7327 7328 7332 7403 7413 7416 7439 7441 7443 7445 7448 7450 7452 7490 7493 7500 7504 7506 7561 7563 7568 7573 7655 7746 7773 7851 7853 7856 7858 7860 7862 7864 786