ASM1130 CROSS ASSEMBLER V1.22 -- V2M12 -- Sun Nov 1 19:25:11 2020 Source File: \v1plotx.asm PLOTX, FORTRAN PLOTTING I/O SUBR 2 | *************************************************** V1L00020 3 | *STATUS - VERSION 2, MODIFICATION 7 * V1L00030 4 | *SUBROUTINE REWRITTEN IN MOD 7 * V1L00040 5 | * * V1L00050 6 | *SUBROUTINE NAME - * V1L00060 7 | * FULL NAME - IBM 1627 PLOTTER I/O SUBROUTINE * V1L00070 8 | * FOR USE INDIRECTLY FROM FORTRAN * V1L00080 9 | * CODE NAME - PLOTX * V1L00090 10 | * * V1L00100 11 | *PURPOSE - * V1L00110 12 | * THIS ISS SUBROUTINE DRIVES THE IBM 1627 * V1L00120 13 | * PLOTTER. * V1L00130 14 | * * V1L00140 15 | *METHOD - * V1L00150 16 | * PLOTX MAINTAINS A CIRCULAR BUFFER TO * V1L00160 17 | * ACCUMULATE PLOTTER COMMANDS. PIN IS THE * V1L00170 18 | * ADDRESS OF THE NEXT WORD TO RECEIVE A COMMAND * V1L00180 19 | * AND POUT IS THE ADDRESS OF THE NEXT COMMAND * V1L00190 20 | * TO BE OUTPUT TO THE PLOTTER. * V1L00200 21 | * IF PIN = POUT, THEN THE BUFFER IS EMPTY. * V1L00210 22 | * ALTHOUGH ALL WORDS OF THE BUFFER ARE USED, AT * V1L00220 23 | * LEAST 1 WORD MUST BE UNUSED AT ANY TIME (OR * V1L00230 24 | * ELSE THE BUFFER WOULD APPEAR TO BE EMPTY WHEN * V1L00240 25 | * PIN CIRCLES AROUND AND CATCHES UP WITH POUT). * V1L00250 26 | * THE MAINLINE AND INTERRUPT PORTIONS OF THIS * V1L00260 27 | * SUBROUTINE WORK ASYNCHRONOUSLY. IF ALL * V1L00270 28 | * PREVIOUS ACTION IN THE INTERRUPT PORTION HAS * V1L00280 29 | * CEASED, THEN THE MAINLINE ENTERS THE INTERRUPT* V1L00290 30 | * PORTION AND INITIATES THE FIRST NEW PLOTTER * V1L00300 31 | * COMMAND. * V1L00310 32 | * * V1L00320 33 | *CAPABILITIES AND LIMITATIONS - * V1L00330 34 | * VALID ARGUMENTS - * V1L00340 35 | * ANY NUMBER FROM 0 TO 9 IN BITS 12-15. * V1L00350 36 | * ANY OTHER NUMBER IS COMPLETELY IGNORED. * V1L00360 37 | * * V1L00370 38 | *SPECIAL FEATURES - * V1L00380 39 | * INTERNAL CIRCULAR BUFFER THAT SAVES DATA FROM * V1L00390 40 | * MANY CALLS AND SO SMOOTHS OPERATION OF PLOTTER* V1L00400 41 | * * V1L00410 42 | *EXTERNAL REFERENCES - * V1L00420 43 | * $IOCT * V1L00430 44 | * $PRET * V1L00440 45 | * $PST3 * V1L00450 46 | * * V1L00460 47 | *ADDITIONAL INFORMATION - * V1L00470 48 | * ERROR PROCEDURES - * V1L00480 49 | * BRANCH TO $PRET OR $PST3 IF PLOTTER * V1L00490 50 | * NOT READY * V1L00500 51 | * CALLING SEQUENCE - * V1L00510 52 | * LIBF PLOTX SUBROUTINE CALL * V1L00520 53 | * DC /XXXD D IS 0 TO 9, X IS IGNORED * V1L00530 54 | *************************************************** V1L00540 55 | * EJCT BLK REMOVED V1L00550 56 | LIBR V1L00560 0000 57 | 1130 ISS 07 PLOTX 3 V1L00570 0028 58 | $PRET EQU /0028 PRE-OP ERROR TRAP V1L00580 0032 59 | $IOCT EQU /0032 MONITOR I/O COUNTER V1L00590 0089 60 | $PST3 EQU /0089 LEVEL 3 ERROR TRAP V1L00600 61 | * V1L00610 0000 6911 62 | PLOTX STX 1 XR1+1 LIBF ENTRANCE V1L00620 0001 6580 0000 63 | LDX I1 *-* LIBF+1 INTO XR1 V1L00630 0003 7002 64 | MDX START V1L00640 0004 0000 65 | INT DC *-* INTERRUPT ENTRANCE V1L00650 0005 7029 66 | MDX INTR BRANCH TO HANDLE INTERRUPT V1L00660 67 | * V1L00670 68 | * V1L00680 69 | *************************************************** V1L00690 70 | * V1L00700 71 | * PERFORM HOUSEKEEPING AND ACCEPT V1L00710 72 | * INPUT PARAMETER V1L00720 73 | * V1L00730 74 | *************************************************** V1L00740 75 | * V1L00750 76 | * V1L00760 0006 280C 77 | START STS XR1+2 SAVE STATUS V1L00770 0007 D054 78 | STO SAVA SAVE ACCUMULATOR V1L00780 79 | * V1L00790 0008 7101 80 | MDX 1 1 V1L00800 0009 690B 81 | STX 1 RETML+1 STORE RETURN ADDRESS V1L00810 82 | * V1L00820 000A C1FF 83 | LD 1 -1 LOAD INPUT PARAMETER V1L00830 000B E058 84 | AND H000F IGNORE 1ST 12 BITS V1L00840 85 | * V1L00850 000C D051 86 | STO PARA STORE PARAMETER V1L00860 000D 9055 87 | S H0009 IS IT LEGAL V1L00870 000E 4C08 0016R 88 | BSC L PUT,+ YES, BRANCH V1L00880 89 | * V1L00890 90 | * V1L00900 91 | *************************************************** V1L00910 92 | * V1L00920 93 | * EXIT ROUTINE V1L00930 94 | * V1L00940 95 | *************************************************** V1L00950 96 | * V1L00960 97 | * V1L00970 0010 C04B 98 | EXITM LD SAVA RESTORE ACCUMULATOR V1L00980 0011 6500 0000 99 | XR1 LDX L1 *-* RESTORE XR1 V1L00990 0013 2000 100 | LDS 0 RESTORE STATUS V1L01000 0014 4C00 0000 101 | RETML BSC L *-* RETURN TO CALLER V1L01010 102 | * V1L01020 103 | * V1L01030 104 | *************************************************** V1L01040 105 | * V1L01050 106 | * MAINLINE OF PLOTX V1L01060 107 | * V1L01070 108 | *************************************************** V1L01080 109 | * V1L01090 110 | * V1L01100 0016 C052 111 | PUT LD PIN SET PIN TEMPORARY V1L01110 0017 804A 112 | A H0001 *TO V1L01120 0018 D04E 113 | STO PINT *PIN + 1 V1L01130 114 | * V1L01140 0019 9051 115 | S PEND IS PINT BEYOND END OF V1L01150 001A 4C08 001ER 116 | BSC L FULL,+ *BUFFER, BR IF NOT V1L01160 117 | * V1L01170 001C C04B 118 | LD PSTRT SET PINT TO ADDR OF V1L01180 001D D049 119 | STO PINT *START OF I/O BUFFER V1L01190 120 | * V1L01200 001E C048 121 | FULL LD PINT IS CIRCULAR BUFFER V1L01210 001F 904A 122 | S POUT *ALREADY FULL V1L01220 0020 4C18 001ER 123 | BSC L FULL,+- YES, BR TO WAIT FOR ROOM V1L01230 124 | * V1L01240 0022 C03B 125 | LD PARA GET 1627 PLOTTER V1L01250 0023 8053 126 | A TABLE *CONTROL WORD V1L01260 0024 D001 127 | STO *+1 *CORRESPONDING TO V1L01270 0025 C400 0000 128 | LD L *-* *ARGUMENT DIGIT V1L01280 0027 D480 0069R 129 | STO I PIN STORE IN BUFFER AT PIN ADDR V1L01290 130 | * V1L01300 0029 C03D 131 | LD PINT ADVACE PIN ADDR TO SHOW NEW V1L01310 002A D03E 132 | STO PIN *DATA NOW IN BUFFER V1L01320 133 | * V1L01330 002B 7400 0060R 134 | MDX L0 BUSY,0 IS THIS SUBROUTINE BUSY V1L01340 002D 70E2 135 | MDX EXITM YES, BR TO RETURN V1L01350 002E 700B 136 | MDX SCAN NO, BR TO INITIATE I/O V1L01360 137 | * V1L01370 138 | * V1L01380 139 | *************************************************** V1L01390 140 | * V1L01400 141 | * INTERRUPT SERVICING ROUTINE V1L01410 142 | * V1L01420 143 | *************************************************** V1L01430 144 | * V1L01440 145 | * V1L01450 002F 1810 146 | INTR SRA 16 RESET THIS SUBROUTINE BUSY V1L01460 0030 D02F 147 | STO BUSY *INDICATOR TO 0 V1L01470 148 | * V1L01480 0031 082C 149 | XIO SENSR-1 SENSE PLOTTER DSW RESET V1L01490 0032 D033 150 | STO INTER SET INTERRUPT ENTRY INDR V1L01500 151 | * V1L01510 0033 74FF 0032 152 | MDX L $IOCT,-1 DECREMENT MONITOR I/O CNT V1L01520 0035 1000 153 | NOP MAY SKIP V1L01530 154 | * V1L01540 0036 C033 155 | LD POUT IS BUFFER V1L01550 0037 9031 156 | S PIN *EMPTY V1L01560 0038 4C18 004AR 157 | BSC L CONT,+- YES, BR TO RETURN V1L01570 158 | * V1L01580 003A C02F 159 | SCAN LD POUT SAVE OLD POUT ADDR WHICH V1L01590 003B D024 160 | STO WRITE *ALSO SETS SUBR BUSY ON V1L01600 161 | * V1L01610 003C 8025 162 | A H0001 INCREMENT POUT ADDR V1L01620 003D D02C 163 | STO POUT *BY 1 V1L01630 164 | * V1L01640 003E 902C 165 | S PEND POUT ADDY BEYOND END BUFFER V1L01650 003F 4C08 0043R 166 | BSC L LOOPS,+ NO, BR TO CONTINUE V1L01660 167 | * V1L01670 0041 C026 168 | LD PSTRT RESET POUT ADDR TO START V1L01680 0042 D027 169 | STO POUT *OF CIRCULAR BUFFER V1L01690 170 | * V1L01700 0043 0818 171 | LOOPS XIO SENSE-1 SENSE PLOTTER DSW V1L01710 0044 4C04 0051R 172 | BSC L NTRDY,E BR IF NOT READY V1L01720 173 | * V1L01730 0046 7401 0032 174 | MDX L0 $IOCT,1 INCREMENT MONITOR I/O CNT V1L01740 0048 1000 175 | NOP MAY SKIP IF VALUE INVALID V1L01750 176 | * V1L01760 0049 0816 177 | XIO WRITE EXECUTE PLOTTING COMMAND V1L01770 178 | * V1L01780 004A C01B 179 | CONT LD INTER IS THIS INTERRUPT ENTRY V1L01790 004B 4C18 0010R 180 | BSC L EXITM,+- NO, BR TO MAINLINE RETURN V1L01800 181 | * V1L01810 004D 1810 182 | SRA 16 RESET INTERRUPT ENTRY V1L01820 004E D017 183 | STO INTER *INDICATOR V1L01830 184 | * V1L01840 004F 4C80 0004R 185 | BSC I INT RETURN FROM INTERRUPT V1L01850 186 | * V1L01860 0051 C014 187 | NTRDY LD INTER IS THIS INTERRUPT ENTRY V1L01870 0052 4C18 0058R 188 | BSC L PREOP,+- NO, BR TO MAINLINE TRAP V1L01880 189 | * V1L01890 0054 C010 190 | LD H7000 LOAD NOT READY ERROR CODE V1L01900 0055 4400 0089 191 | BSI L $PST3 BR TO POST-OP ERROR TRAP V1L01910 0057 70EB 192 | MDX LOOPS BR TO TRY AGAIN V1L01920 193 | * V1L01930 0058 C00C 194 | PREOP LD H7000 LOAD NOT READY ERROR CODE V1L01940 0059 4400 0028 195 | BSI L $PRET BR TO PRE-OP ERROR TRAP V1L01950 005B 70E7 196 | MDX LOOPS BR TO TRY AGAIN V1L01960 197 | * V1L01970 198 | * V1L01980 199 | *************************************************** V1L01990 200 | * V1L02000 201 | * CONSTANTS AND WORKING STORAGE V1L02010 202 | * V1L02020 203 | *************************************************** V1L02030 204 | * V1L02040 205 | * V1L02050 005C 206 | BSS E 0 V1L02060 005C 0000 207 | SAVA DC 0 HOLDS SAVED ACCUMULATOR V1L02070 005D 2F00 208 | SENSE DC /2F00 SENSE PLOTTER IOCC V1L02080 005E 0000 209 | PARA DC *-* HOLDS PARAMETER V1L02090 005F 2F01 210 | SENSR DC /2F01 SENSE PLOTTER DSW RESET V1L02100 0060 0000 211 | WRITE DC *-* PUT POUT IN HERE V1L02110 0060R 212 | BUSY EQU *-1 THIS SUBROUTINE BUSY INDR V1L02120 0061 2900 213 | DC /2900 WRITE PLOTTER IOCC V1L02130 0062 0001 214 | H0001 DC /0001 CONSTANT V1L02140 0063 0009 215 | H0009 DC /0009 CONSTANT V1L02150 0064 000F 216 | H000F DC /000F CONSTANT V1L02160 0065 7000 217 | H7000 DC /7000 PLOTTER NOT READY CODE V1L02170 0066 0000 218 | INTER DC *-* INTERRUPT ENTRY INDICATOR V1L02180 219 | * V1L02190 000B 220 | CNT EQU 11 SIZE OF BUFFER V1L02200 0067 0000 221 | PINT DC *-* PIN TEMPORARY STORAGE V1L02210 0068 006CR 222 | PSTRT DC BUF ADDR START OF BUFFER V1L02220 0069 006CR 223 | PIN DC BUF ADDR NEXT WORD INPUT V1L02230 006A 006CR 224 | POUT DC BUF ADDR NEXT WORD OUTPUT V1L02240 006B 0076R 225 | PEND DC BUF+CNT-1 ADDR LAST WORD OF BUFFER V1L02250 006C 226 | BUF BSS CNT CIRCULAR I/O BUFFER V1L02260 227 | * V1L02270 228 | * CONTROL CODES FOR PLOTTER V1L02280 229 | * V1L02290 0077 0078R 230 | TABLE DC CNTRL BASE ADDR TO CONTROL TABLE V1L02300 0078 8000 231 | CNTRL DC /8000 0 PEN DOWN V1L02310 0079 0800 232 | DC /0800 1 +Y V1L02320 007A 4800 233 | DC /4800 2 +X +Y V1L02330 007B 4000 234 | DC /4000 3 +X V1L02340 007C 5000 235 | DC /5000 4 +X -Y V1L02350 007D 1000 236 | DC /1000 5 -Y V1L02360 007E 3000 237 | DC /3000 6 -X -Y V1L02370 007F 2000 238 | DC /2000 7 -X V1L02380 0080 2800 239 | DC /2800 8 -X +Y V1L02390 0081 0400 240 | DC /0400 9 PEN UP V1L02400 0082 241 | END V1L02410 There were no errors in this assembly === CROSS REFERENCES ========================================================== Name Val Defd Referenced $IOCT 0032 59 152 174 $PRET 0028 58 195 $PST3 0089 60 191 BUF 006CR 226 222 223 224 225 BUSY 0060R 212 134 147 CNT 000B 220 225 226 CNTRL 0078R 231 230 CONT 004AR 179 157 EXITM 0010R 98 135 180 FULL 001ER 121 116 123 H0001 0062R 214 112 162 H0009 0063R 215 87 H000F 0064R 216 84 H7000 0065R 217 190 194 INT 0004R 65 185 INTER 0066R 218 150 179 183 187 INTR 002FR 146 66 LOOPS 0043R 171 166 192 196 NTRDY 0051R 187 172 PARA 005ER 209 86 125 PEND 006BR 225 115 165 PIN 0069R 223 111 129 132 156 PINT 0067R 221 113 119 121 131 PLOTX 0000R 62 POUT 006AR 224 122 155 159 163 169 PREOP 0058R 194 188 PSTRT 0068R 222 118 168 PUT 0016R 111 88 RETML 0014R 101 81 SAVA 005CR 207 78 98 SCAN 003AR 159 136 SENSE 005DR 208 171 SENSR 005FR 210 149 START 0006R 77 64 TABLE 0077R 230 126 WRITE 0060R 211 160 177 XR1 0011R 99 62 77