ASM1130 CROSS ASSEMBLER V1.22 -- V2M12 -- Sun Nov 1 19:25:09 2020 Source File: \u2plot1.asm PLOT1 SUBROUTINE 2 | *************************************************** U2G00020 3 | *STATUS - VERSION 2, MODIFICATION 8 * U2G00022 4 | * * U2G00024 5 | *SUBROUTINE NAME - * U2G00026 6 | * FULL NAME - N/A * U2G00028 7 | * CODE NAME - PLOT1 * U2G00030 8 | * * U2G00032 9 | *PURPOSE- * U2G00034 10 | * THIS SUBROUTINE OPERATES THE IBM 1627 PLOTTER.* U2G00036 11 | * IT CAN DO A TEST OR A PLOT FUNCTION. * U2G00038 12 | * * U2G00040 13 | *METHOD - N/A * U2G00043 14 | * * U2G00046 15 | *CAPABILITIES AND LIMITATIONS - * U2G00050 16 | * SEE IBM 1130 SUBROUTINE LIBRARY MANUAL * U2G00053 17 | * * U2G00056 18 | *SPECIAL FEATURES - * U2G00060 19 | * THIS SUBROUTINE IS CALLED WITH THE DATA IN A * U2G00063 20 | * USER BUFFER. DATA MAY HAVE A REPETITION COUNT* U2G00066 21 | * ISS SUBROUTINE PLOTX MAY ONLY BE CALLED WITH A* U2G00070 22 | * SINGLE DATA ITEM, BUT IT ACCUMULATES THEM IN * U2G00073 23 | * ITS OWN SMALL BUFFER. * U2G00076 24 | *EXTERNAL REFERENCES - * U2G00080 25 | * $IOCT * U2G00081 26 | * $PRET * U2G00083 27 | * $PST3 * U2G00084 28 | * * U2G00090 29 | *ADDITIONAL INFORMATION - * U2G00093 30 | * ERROR PROCEDURES - * U2G00096 31 | * PAUSE AT $PRET OR $PST3 IF PLOTTER NOT * U2G00100 32 | * READY. * U2G00103 33 | * THE ERROR SUBROUTINE PARAMETER IS NOT USED,* U2G00106 34 | * BUT IS REQUIRED FOR COMPATABILITY WITH THE * U2G00110 35 | * IBM 1800 VERSION OF THIS SUBROUTINE. * U2G00113 36 | * * U2G00116 37 | * CALLING SEQUENCE - * U2G00120 38 | * LIBF PLOT1 CALL PLOTTER BUSY TEST * U2G00123 39 | * DC /0000 CONTROL PARAMETER * U2G00126 40 | * . RETURNS HERE IF BUSY * U2G00130 41 | * . RETURNS HERE IF NOT BUSY * U2G00133 42 | * * U2G00136 43 | * LIBF PLOT1 CALL PLOTTER OUTPUT * U2G00140 44 | * DC /X000 CONTROL PARAMETER * U2G00143 45 | * DC IOAR I/O AREA PARAMETER * U2G00146 46 | * DC ERROR ERROR PARAMETER (NOT USED)* U2G00150 47 | * . * U2G00160 48 | * . * U2G00170 49 | *IOAR DC F WORD COUNT * U2G00180 50 | * BSS H I/O AREA * U2G00181 51 | * * U2G00185 52 | *NOTES - * U2G00186 53 | * * U2G00190 54 | * THE MAINLINE FLOW MAY BE ALTERED BY THE * U2G00192 55 | * USER AT $PRET WITHOUT AFFECTING THE * U2G00193 56 | * POSSIBILITY OF AN ENTIRELY NEW LIBF PLOT1 AT * U2G00194 57 | * SOME LATER TIME. * U2G00195 58 | *************************************************** U2G00200 59 | * EJCT BLK REMOVED U2G00205 60 | LIBR U2G00210 0000 61 | 1130 ISS 07 PLOT1 3 U2G00220 0000 6912 62 | PLOT1 STX 1 XR1+1 CALL ENTRANCE (+0) U2G00250 0001 6580 0000 63 | LDX I1 *-* LIBF+1 INTO XR1 U2G00260 0003 7002 64 | MDX STAR BR TO PROCESS LIBF U2G00270 0004 0000 65 | INT1 DC 0 INTERRUPT ENTRANCE (+4) U2G00280 0005 7040 66 | MDX IPRG BR TO SERVICE INTERRUPT U2G00290 0006 280D 67 | STAR STS STAT SAVE STATUS U2G00320 0007 D838 68 | STD SAVAQ SAVE A AND Q REGS U2G00330 0008 C100 69 | LD 1 0 GET THE CONTROL WORD U2G00340 0009 180C 70 | SRA 12 IS FUNCTION TEST U2G00350 000A 4C20 0017R 71 | BSC L LEGAL,Z NO, CONTINUE AT LEGAL U2G00360 000C C02B 72 | LD BUSY YES, IS ROUTINE BUSY U2G00370 000D 4818 73 | BSC +- U2G00380 000E 7101 74 | RETRN MDX 1 1 NO, RETURN TO LIBF+3 U2G00390 000F 7101 75 | MDX 1 1 YES, RETURN TO LIBF+2 U2G00400 0010 C82F 76 | RESET LDD SAVAQ RESTORE ACC AND EXT U2G00410 0011 6904 77 | STX 1 RET+1 SET UP RETURN U2G00420 0012 6500 0000 78 | XR1 LDX L1 *-* RESTORE XR1 U2G00430 0014 2000 79 | STAT LDS *-* RESTORE STATUS U2G00440 0015 4C00 0000 80 | RET BSC L *-* RETURN U2G00450 0017 1801 81 | LEGAL SRA 1 IS FUNCTION = WRITE U2G00460 0018 4C18 0020R 82 | BSC L WRT,+- YES U2G00470 001A C01C 83 | ILLGL LD C7001 NO, LD ILLEGAL CALL CODE U2G00480 001B 71FF 84 | ERRET MDX 1 -1 U2G00490 001C 6D00 0028 85 | STX L1 $PRET LIBF ADDR INTO CORE LOC 40 U2G00500 001E 6129 86 | LDX 1 $PRET+1 SET TO EXIT TO CORE LOC 41 U2G00510 001F 70F1 87 | MDX RESET+1 GO EXIT U2G00520 88 | * U2G00530 89 | *THIS SECTION SETS UP THE ROUTINE TO PLOT THE U2G00540 90 | *FIRST CHARACTER. U2G00550 0020 C017 91 | WRT LD BUSY IS ROUTINE BUSY U2G00560 0021 4C20 0020R 92 | BSC L WRT,Z LOOP IF BUSY U2G00570 0023 6814 93 | STX 0 BUSY SET BUSY INDR U2G00580 0024 6864 94 | STX 0 FIRST SET FIRST CHAR INDR U2G00590 0025 C01E 95 | LD C0005 SET HEX DIGIT COUNTER U2G00740 0026 D017 96 | STO DIGIT TO 5 FOR FIRST TIME U2G00750 0027 C580 0001 97 | LD I1 1 SET UP WORD COUNT U2G00760 0029 4C08 001AR 98 | BSC L ILLGL,+ BR IF WORD COUNT BAD U2G00770 002B D010 99 | STO WDCNT U2G00780 002C C101 100 | LD 1 1 AND I/O AREA U2G00790 002D 8015 101 | A C0001 U2G00800 002E D013 102 | STO IOAR U2G00810 002F C480 0042R 103 | LD I IOAR PUT FIRST WORD IN BUF U2G00820 0031 D007 104 | STO BUF U2G00830 0032 7401 0032 105 | MDX L $IOCT,1 INCR MONITOR I/O COUNTER U2G00880 0034 1000 106 | NOP U2G00890 0035 7101 107 | MDX 1 1 XR1 PTS TO ERROR RTN ADDR U2G00900 0036 7013 108 | MDX ALPHA BR TO SERVICE FIRST CHAR U2G00950 109 | * U2G00990 110 | *CONSTANTS AND BUFFER AREA U2G01000 111 | * U2G01010 0037 7001 112 | C7001 DC /7001 ILLEGAL CALL ERROR CODE U2G01020 0038 0000 113 | BUSY DC *-* DEVICE BUSY INDR U2G01060 0039 0000 114 | BUF DC *-* O/P BUFFER U2G01080 003A 115 | BSS E 0 U2G01090 003A 0000 116 | IOCC DC *-* WRITE 1627 PLOTTER IOCC U2G01100 003B 2900 117 | DC /2900 U2G01110 003C 0000 118 | SENSE DC *-* U2G01120 003CR 119 | WDCNT EQU *-1 I/O AREA WORD COUNT U2G01130 003D 2F00 120 | DC /2F00 SENSE PLOTTER IOCC U2G01140 003E 0000 121 | SENSR DC *-* U2G01142 003ER 122 | DIGIT EQU *-1 HEX DIGIT COUNTER U2G01144 003F 2F01 123 | DC /2F01 SENSE PLOTTER RESET IOCC U2G01146 0040 0000 124 | SAVAQ DC *-* SAVE ACC AND EXT U2G01150 0041 0000 125 | DC *-* * U2G01160 0042 0000 126 | IOAR DC *-* I/O ADDR STG U2G01170 0043 0001 127 | C0001 DC /0001 PARITY ERROR CODE U2G01180 0044 0005 128 | C0005 DC /0005 CON FOR SETTING HEX CTR U2G01190 0045 7000 129 | C7000 DC /7000 DVC NOT RDY ERROR CODE U2G01200 0028 130 | $PRET EQU 40 PRE-OPERATIVE ERROR TRAP U2G01210 0032 131 | $IOCT EQU 50 ISS COUNTER U2G01220 0089 132 | $PST3 EQU /89 POST-OPERATIVE ERROR TRAP U2G01230 133 | * U2G01240 134 | *THIS PORTION THE PROGRAM SERVICES THE OP COMPLETE U2G01250 135 | *INTERRUPTS FROM THE PLOTTER ON LEVEL 03. U2G01260 136 | * U2G01270 0046 08F7 137 | IPRG XIO SENSR SENSE WITH RESET DSW U2G01290 0047 74FF 00ACR 138 | MDX L DUPCT,-1 ANY MORE DUPLICATES U2G01360 0049 7022 139 | MDX PLOTC YES,GO PLOT AGAIN U2G01370 004A 1010 140 | ALPHA SLA 16 NO,ZERO DUPLICATE COUNT U2G01380 004B D060 141 | STO DUPCT U2G01390 004C 403D 142 | ALPH2 BSI GET SUBROUTINE TO GET DIGIT U2G01400 004D 905F 143 | S C000D IS DIGIT D, E, OR F U2G01410 004E 4C10 004CR 144 | BSC L ALPH2,- YES.NOT USED.GET NEXT DIGIT U2G01420 0050 805D 145 | A C0003 NO, IS DIGIT A,B,C U2G01430 0051 4C28 0069R 146 | BSC L LOOK,+Z NO, IS 0-9.SINGLE INST U2G01440 0053 4C20 005AR 147 | BSC L BC,Z YES, MEANS DUPLICATE U2G01450 148 | * CHAR IS B OR C ,BR U2G01460 0055 4034 149 | BSI GET CHAR IS A --GET COUNT U2G01470 0056 D055 150 | BCM5 STO DUPCT U2G01480 0057 4C20 006CR 151 | BSC L PLOTC,Z BR IF DUPLICATE TO PLOT U2G01510 0059 70F0 152 | MDX ALPHA DO NOT PLOT IF COUNT = 0 U2G01520 153 | * U2G01530 154 | *THIS SECTION DUPLICATES UP TO 255 TIMES (B) U2G01540 155 | * U2G01550 005A 90E8 156 | BC S C0001 IS CHAR C U2G01560 005B 4C20 0063R 157 | BSC L C,Z YES,BR U2G01570 005D 402C 158 | BSI GET NO, CHAR IS B U2G01580 005E 1004 159 | CM5 SLA 4 GET A DIGIT U2G01590 005F D04C 160 | STO DUPCT SHIFT TO ALLOW FOR NEXT U2G01600 0060 4029 161 | BSI GET GET LAST DIGIT U2G01610 0061 E84A 162 | OR DUPCT U2G01620 0062 70F3 163 | MDX BCM5 PUT COUNT IN DUPCT U2G01630 164 | * U2G01640 165 | *THIS SECTION DUPLICATES UP TO 4095 TIMES (C) U2G01650 166 | * U2G01660 0063 4026 167 | C BSI GET GET FIRST DIGIT U2G01670 0064 1004 168 | SLA 4 U2G01680 0065 D046 169 | STO DUPCT U2G01690 0066 4023 170 | BSI GET AND SECOND DIGIT. U2G01700 0067 E844 171 | OR DUPCT U2G01710 0068 70F5 172 | MDX CM5 GO TO OTHER AREA TO GET 3RD U2G01720 0069 C045 173 | LOOK LD CTRL DIGIT IS FROM 0-9 U2G01730 006A 8040 174 | A WORK U2G01740 006B D0CE 175 | STO IOCC ADDR FOR CONTROL U2G01750 176 | * U2G01760 177 | *THIS SECTION ACTIVATES THE PLOTTER U2G01770 178 | * U2G01780 006C 08CF 179 | PLOTC XIO SENSE SENSE DSW WITHOUT RESET U2G01790 006D 100E 180 | SLA 14 U2G01800 006E 4C20 0076R 181 | BSC L NR,Z NOT RDY BUSY-TO ERROR TRAP U2G01810 0070 C018 182 | LD FIRST IS THE CHAR THE FIRST U2G01820 0071 4C20 0085R 183 | BSC L FST,Z YES, GO TO RET TO CALL U2G01830 184 | * * ENTRANCE PORTION U2G01840 0073 08C6 185 | XIO IOCC **** PLOT **** U2G01850 0074 4C80 0004R 186 | EXIT BSC I INT1 RET TO ILS 03 U2G01860 187 | * U2G01870 188 | *EXIT TO POST-OPERATIVE ERROR TRAP WITH NOT READY U2G01880 189 | *ERROR CODE IN THE ACCUMULATOR. U2G01890 190 | * U2G01900 0076 C0CE 191 | NR LD C7000 ERROR CODE INTO ACC U2G01910 0077 7400 0089R 192 | MDX L0 FIRST,0 IS THIS THE FIRST DIGIT U2G01914 0079 7003 193 | MDX NRPRT YES, BR MAINLINE U2G01916 007A 4400 0089 194 | BSI L $PST3 BR TO LEVEL 3 TRAP U2G01920 007C 70EF 195 | MDX PLOTC TRY AGAIN U2G01930 196 | * U2G01931 197 | *SET UP TO START LIBF PLOT1 AGAIN AFTER $PRET TRAP U2G01932 198 | * U2G01933 007D 74FF 0032 199 | NRPRT MDX L0 $IOCT,-1 CANCEL MONITOR I/O U2G01934 007F 1000 200 | NOP *COUNTER INCREMENT U2G01935 0080 1810 201 | SRA 16 CANCEL THIS SUBROUTINE U2G01936 0081 D0B6 202 | STO BUSY *BUSY INDICATOR U2G01937 0082 71FF 203 | MDX 1 -1 DECR POINTER TO LIBF U2G01938 0083 C0C1 204 | LD C7000 ERROR CODE INTO ACC U2G01939 0084 7096 205 | MDX ERRET BR $PRET, THEN LIBF PLOT1 U2G01940 206 | * U2G01941 207 | *CHAR IS THE FIRST TO BE O/P.DONT RET TO ILS 03, U2G01950 208 | *BUT TO MAINLINE. U2G01960 209 | * U2G01970 0085 1010 210 | FST SLA 16 ZERO THE FIRST INDR U2G01980 0086 D002 211 | STO FIRST U2G01990 0087 08B2 212 | XIO IOCC PLOT U2G02000 0088 7085 213 | MDX RETRN RETURN TO MAINLINE U2G02010 0089 0000 214 | FIRST DC *-* FIRST CHAR INDR U2G02020 008A 0000 215 | GET DC 0 SAVE RET ADDR U2G02030 216 | * U2G02040 217 | *THIS SUBROUTINE GETS A HEXADECIMAL DIGIT U2G02050 218 | * U2G02060 008B 74FF 003ER 219 | MDX L DIGIT,-1 DECR DIGIT COUNT U2G02070 008D 7013 220 | MDX SHIFT IF NOT ZERO,GO GET DIGIT U2G02080 008E 7404 003ER 221 | MDX L DIGIT,4 IF ZERO,RESET TO 4 U2G02090 0090 74FF 003CR 222 | MDX L WDCNT,-1 DECRE WORD COUNT U2G02100 0092 7009 223 | MDX IOBUF IF WD CNT NOT ZERO,GET WD U2G02110 0093 74FF 0032 224 | MDX L $IOCT,-1 IF ZERO, DECRE ISS CTR U2G02120 0095 1000 225 | NOP U2G02130 0096 1010 226 | SLA 16 ZERO ROUTINE BUSY INDR U2G02140 0097 D0A0 227 | STO BUSY U2G02150 0098 C0F0 228 | LD FIRST U2G02160 0099 4C20 000ER 229 | BSC L RETRN,Z RETURN TO MAINLINE IF FIRST U2G02170 009B 70D8 230 | MDX EXIT RET TO ILS03 IF NOT FIRST U2G02180 231 | * U2G02190 232 | *THIS SECTION GETS THE NEXT WORD, AND DOES A SHIFT U2G02200 233 | *TO ISOLATE THE NEXT HEX DIGIT. U2G02210 234 | * U2G02220 009C 7401 0042R 235 | IOBUF MDX L IOAR,1 NEXT WORD IN I/O AREA U2G02230 009E C480 0042R 236 | LD I IOAR U2G02240 00A0 D098 237 | STO BUF PUT NEXT WD IN O/P BUFFER U2G02250 00A1 C097 238 | SHIFT LD BUF GET BUFFER WD U2G02260 00A2 1890 239 | SRT 16 PUT IN EXT. U2G02270 00A3 1010 240 | SLA 16 CLEAR ACC. U2G02280 00A4 1084 241 | SLT 4 4 BITS FOR HEX DIGIT U2G02290 00A5 D005 242 | STO WORK SAVE THE DIGIT U2G02300 00A6 1090 243 | SLT 16 SET UP BUFFER FOR NEXT LOOP U2G02310 00A7 D091 244 | STO BUF U2G02320 00A8 C002 245 | LD WORK PUT DIGIT IN ACC U2G02330 00A9 4C80 008AR 246 | BSC I GET RET TO CALL U2G02340 247 | * U2G02350 248 | *CONSTANTS AND BUFFER AREA U2G02360 249 | * U2G02370 00AB 0000 250 | WORK DC *-* BUFFER TO SAVE DIGIT U2G02380 00AC 0000 251 | DUPCT DC *-* DUPLICATE COUNT BUFFER U2G02390 00AD 000D 252 | C000D DC /000D TEST FOR CHAR D,E, OR F U2G02400 00AE 0003 253 | C0003 DC /0003 CON OF 3 U2G02410 254 | *TABLE OF CONTROL WORDS U2G02420 00AF 00B0R 255 | CTRL DC CONTL CONTROL TABLE ADDR U2G02430 00B0 8000 256 | CONTL DC /8000 PEN DOWN U2G02440 00B1 0800 257 | DC /0800 +Y U2G02450 00B2 4800 258 | DC /4800 +Y+Y U2G02460 00B3 4000 259 | DC /4000 +X U2G02470 00B4 5000 260 | DC /5000 +X-Y U2G02480 00B5 1000 261 | DC /1000 -Y U2G02490 00B6 3000 262 | DC /3000 -X-Y U2G02500 00B7 2000 263 | DC /2000 -X U2G02510 00B8 2800 264 | DC /2800 -X+Y U2G02520 00B9 0400 265 | DC /0400 PEN UP U2G02530 00BA 266 | END U2G02540 There were no errors in this assembly === CROSS REFERENCES ========================================================== Name Val Defd Referenced $IOCT 0032 131 105 199 224 $PRET 0028 130 85 86 $PST3 0089 132 194 ALPH2 004CR 142 144 ALPHA 004AR 140 108 152 BC 005AR 156 147 BCM5 0056R 150 163 BUF 0039R 114 104 237 238 244 BUSY 0038R 113 72 91 93 202 227 C 0063R 167 157 C0001 0043R 127 101 156 C0003 00AER 253 145 C0005 0044R 128 95 C000D 00ADR 252 143 C7000 0045R 129 191 204 C7001 0037R 112 83 CM5 005ER 159 172 CONTL 00B0R 256 255 CTRL 00AFR 255 173 DIGIT 003ER 122 96 219 221 DUPCT 00ACR 251 138 141 150 160 162 169 171 ERRET 001BR 84 205 EXIT 0074R 186 230 FIRST 0089R 214 94 182 192 211 228 FST 0085R 210 183 GET 008AR 215 142 149 158 161 167 170 246 ILLGL 001AR 83 98 INT1 0004R 65 186 IOAR 0042R 126 102 103 235 236 IOBUF 009CR 235 223 IOCC 003AR 116 175 185 212 IPRG 0046R 137 66 LEGAL 0017R 81 71 LOOK 0069R 173 146 NR 0076R 191 181 NRPRT 007DR 199 193 PLOT1 0000R 62 PLOTC 006CR 179 139 151 195 RESET 0010R 76 87 RET 0015R 80 77 RETRN 000ER 74 213 229 SAVAQ 0040R 124 68 76 SENSE 003CR 118 179 SENSR 003ER 121 137 SHIFT 00A1R 238 220 STAR 0006R 67 64 STAT 0014R 79 67 WDCNT 003CR 119 99 222 WORK 00ABR 250 174 242 245 WRT 0020R 91 82 92 XR1 0012R 78 62