Commit | Line | Data |
---|---|---|
81e70d48 PH |
1 | /THIS IS A SET OF PLOTTING ROUTINES THAT ARE VERY SIMILAR TO THE CALCOMP\r |
2 | /SET OF PLOTTING ROUTINES, BUT ARE WRITTEN FOR A PDP8E WITH AN EAE.\r | |
3 | /\r | |
4 | //WRITTEN BY JONATHAN R. GROSS\r | |
5 | /SOCIAL SCIENCES RESEARCH FACILITIES CENTER\r | |
6 | /25 BLEGEN HALL\r | |
7 | /UNIVERSITY OF MINNESOTA, WEST BANK\r | |
8 | /MINNEAPOLIS, MINNESOTA 55455\r | |
9 | /\r | |
10 | / NOVEMBER 1973\r | |
11 | /\r | |
12 | / PAGE0 FIELD 1 LAYOUT\r | |
13 | /\r | |
14 | /LOCATIONS 160-176 ON PAGE ZERO FIELD ONE ARE USED BECAUSE THE IS NO\r | |
15 | /OTHER WAY I COULD THINK OF TO GENERATE A 12BIT ADDRESS FOR THE MODE B\r | |
16 | /INSTRUCTIONS OF THE EAE. (TAKE NOTE DEC!)\r | |
17 | /\r | |
18 | COMMZ #PAGE0 /SAME AS SYSTEM\r | |
19 | /\r | |
20 | ORG 160 /START OF SECOND USER AREA\r | |
21 | #DX, 0;0 /DP DX\r | |
22 | DX=160\r | |
23 | #DY, 0;0 /DP DY\r | |
24 | DY=162\r | |
25 | /\r | |
26 | / THE REST ARE VALUES FOR LINE GENERATION\r | |
27 | /\r | |
28 | NT=164\r | |
29 | NC=166\r | |
30 | NR=170\r | |
31 | NA=172\r | |
32 | DAC=174\r | |
33 | /\r | |
34 | ORG 176\r | |
35 | BZFLG, 0 /PLOTTING IN PROGRESS\r | |
36 | /\r | |
37 | /\r | |
38 | /\r | |
39 | / THIS IS THE PDP LINE GENERATION ROUTINE\r | |
40 | /\r | |
41 | /EDUCATE RALF\r | |
42 | SWAB=7431\r | |
43 | SWBA=7447\r | |
44 | SHL=7413\r | |
45 | DAD=7443\r | |
46 | DST=7445\r | |
47 | DLD=7663\r | |
48 | DPIC=7573\r | |
49 | DCM=7575\r | |
50 | DPSZ=7451\r | |
51 | CAM=7621\r | |
52 | MQA=7501\r | |
53 | MQL=7421\r | |
54 | SWP=7521\r | |
55 | /\r | |
56 | FIELD1 #GENL\r | |
57 | #DELTA, 0\r | |
58 | CLL CLA CMA RAR /3777 /FOR SIGN TEST\r | |
59 | SWAB /GO TO CORRECT MODE\r | |
60 | TADZ DX /HIGH ORGER X\r | |
61 | MQA /OR PRODUCES 7777 ON NEG. DX\r | |
62 | DCA XSGN\r | |
63 | TADZ DY\r | |
64 | MQA\r | |
65 | DCA YSGN\r | |
66 | DLD; DX\r | |
67 | SWP /ORDER OF EAE REVERSED FROM FPP\r | |
68 | SPA /GET ABS(DX)\r | |
69 | DCM\r | |
70 | DST; DX\r | |
71 | DLD; DY\r | |
72 | SWP\r | |
73 | SMA /GET -(ABS(DY))\r | |
74 | DCM\r | |
75 | DST; DY\r | |
76 | DAD; DX /COMPARE DX AND DY\r | |
77 | SMA CLA /EXCHANGE IF DY IS GREATER\r | |
78 | JMP OK /NO EXCHANGE\r | |
79 | DLD; DY\r | |
80 | DCM /DY WAS STORED AS NEG\r | |
81 | DST; DAC /TEMP\r | |
82 | DLD; DX\r | |
83 | DCM\r | |
84 | DST; DY\r | |
85 | DLD; DAC\r | |
86 | DST; DX\r | |
87 | CLL CLA CMA /-1 FOR FLAG\r | |
88 | OK, DCA ESWCH /EXCHANGE SWITCH\r | |
89 | /\r | |
90 | / THIS TESTS THE VALUE OF IPEN\r | |
91 | /\r | |
92 | /A VALUE OF 2 MEANS THE LINE IS DRAWN WITH THE PEN DOWN\r | |
93 | / A VALUE OF THREE MEANS THAT THE MOVE IS MADE WITH THE PEN UP\r | |
94 | /ANYTHING ELSE PRODUCES NO CHANGE IN THE PEN STATUS\r | |
95 | CLA CLL IAC RAL /2\r | |
96 | AND IPEN /XR0\r | |
97 | SNA CLA /COULD IT BE A 2 OR 3 ?\r | |
98 | JMP NOPEN /NO\r | |
99 | CLL CLA IAC /1\r | |
100 | AND IPEN /TEST FOR 3\r | |
101 | SZA CLA /SKIP ON 2\r | |
102 | CLA CLL CMA RAL /-2 WILL PRODUCE A PEN UP COMMAND\r | |
103 | TAD PENCO\r | |
104 | NOPEN, DCA IPEN /SAVE IT\r | |
105 | /\r | |
106 | /THE NEXT CODE IS ONCE ONLY\r | |
107 | /\r | |
108 | PINIT, JMS% ONQI2+1 /ADDD IOT TO SKIP CHAIN\r | |
109 | 6501 /INSTRUCTION FOR SKIP\r | |
110 | ADDR EXEC /SERVICE ROUTINE ADDRESS\r | |
111 | TAD JMPIN /GET INSTRUCTION TO JUMP AROUND INIT\r | |
112 | DCA PINIT\r | |
113 | 6507 /ENABLE INTERUPTS\r | |
114 | JMPIN, JMP .+1\r | |
115 | JMS% WAITR+1 /WAIT FOR LAST LINE TO FINISH\r | |
116 | DLD; DY /PROCEDE\r | |
117 | SHL; 1 /TIMES 2\r | |
118 | DST; NR /NR=2*(DY) WHERE (DY)=-DY\r | |
119 | DLD; DX\r | |
120 | DST; NA\r | |
121 | DCM\r | |
122 | DST; NC /COUNT IS NEG.\r | |
123 | DCM /RESTORE\r | |
124 | SHL; 1\r | |
125 | DST; NT /NT=2*DX\r | |
126 | CAM\r | |
127 | TAD MY /MINUS Y MOVE\r | |
128 | ISZ YSGN /SKIP ON\r | |
129 | RAR /MAKE INTO POSATIVE Y\r | |
130 | MQL /SAVE\r | |
131 | CLL CLA IAC RTL /0004 IS THE MINUS X BIT\r | |
132 | ISZ XSGN /MAKE +X ?\r | |
133 | RAL /YES\r | |
134 | ISZ ESWCH /WERE THEY EXCHANGED\r | |
135 | SWP /NO, SO PUT MINOR MOVE INTO AC\r | |
136 | MQA /MAKE A COMBINED MOVE\r | |
137 | DCA COMB\r | |
138 | SWP /MAJOR MOVE\r | |
139 | DCA MAJ\r | |
140 | ISZZ BZFLG /SET GOING\r | |
141 | TAD IPEN /GET PEN MOVE\r | |
142 | SNA /ZERO MEANS NO CHANGE\r | |
143 | JMP NULL\r | |
144 | CIA /SEE IF IT IS ALREADY CORRECT\r | |
145 | TAD PENL /COMPARE WITH LAST MOVE\r | |
146 | SZA CLA /SKIP IF SAME\r | |
147 | JMP .+3 /DIFFERENT\r | |
148 | NULL, 6506 /MOVE NOWHERE, BUT GENERATE A FAST INTERUPT\r | |
149 | JMP .+4\r | |
150 | TAD IPEN /MOVE PEN UP OR DOWN\r | |
151 | DCA .+1\r | |
152 | PENL, HLT\r | |
153 | CIF CDF 0 /INTERUPTS WILL TAKE IT FROM HERE\r | |
154 | JMP% #DELTA\r | |
155 | PENCO, 6505\r | |
156 | MY, 40 /MINUS Y MOVE\r | |
157 | IPEN, 0 /PEN CODE AND XR0\r | |
158 | XSGN, 0 /SIGN OF X AND XR1\r | |
159 | YSGN, 0\r | |
160 | ESWCH, 0\r | |
161 | MAJ, /MAJOR PLOTTER MOVE\r | |
162 | WAITR, ADDR #WAIT\r | |
163 | EXTERN ONQI /SYSTEM ROUTINE TO ENTER SKIP CHAIN\r | |
164 | COMB, /COMBINED PLOTTER MOVE\r | |
165 | ONQI2, ADDR ONQI /SYSTEM ROUTINE\r | |
166 | /\r | |
167 | /\r | |
168 | / THIS IS THE FORTRAN INTERFACE TO THE PLOTTER\r | |
169 | /\r | |
170 | /THE CALL IS:\r | |
171 | /\r | |
172 | / CALL DELTAP(DX,DY,IABS(IPEN))\r | |
173 | /\r | |
174 | / WHERE DX IS THE DIFFERENCE BETWEEN THE CURRENT PEN POSITION AND THE\r | |
175 | /END POINT OF THE DESIRED LINE MEASURED ALLONG THE X AXIS,\r | |
176 | / DY IS THE DIFFERENCE MEASURED ALLONG THE Y AXIS,\r | |
177 | /AND IPEN IS THE PEN CONTROL VALUE\r | |
178 | /\r | |
179 | ENTRY DELTAP\r | |
180 | BDELTA, F 0.0 /BASE PAGE\r | |
181 | XPOINT, F 0.0 /POINTERS TO ARGS\r | |
182 | YPOINT, F 0.0 /POINTERS TO ARGS\r | |
183 | PPOINT, F 0.0 /POINTERS TO ARGS\r | |
184 | DELTAP, BASE 0 /SO FLDA 30 AND 0 INSTRUCTIONS ASSEMBLE RIGHT\r | |
185 | STARTD /2WORD MODE FOR ADDRESS PICKUP\r | |
186 | FLDA 30 /GET RETURN ADDRESS\r | |
187 | FSTA GOBAC /SAVE IT FOR RETURN\r | |
188 | FLDA 0 /ARG LIST-1\r | |
189 | SETB BDELTA /NEW BASE PAGE\r | |
190 | BASE BDELTA /MAYBE THE ASSEMBLER CAN SAVE US SPACE\r | |
191 | FSTA BDELTA /POINTER TO ARG LIST\r | |
192 | SETX IPEN /SET INDEXES\r | |
193 | LDX 0,1 /FOR ARG PICKUP\r | |
194 | FLDA% BDELTA,1+ /GET ADDRESS OF FIRST ARG\r | |
195 | FSTA XPOINT\r | |
196 | FLDA% BDELTA,1+ /NOW DY\r | |
197 | FSTA YPOINT\r | |
198 | FLDA% BDELTA,1+ /PEN UP-DOWN\r | |
199 | FSTA PPOINT\r | |
200 | STARTF /BE COMPATABLE WITH FORTRAN\r | |
201 | FLDA% XPOINT /GET DX VALUE\r | |
202 | ALN 0 /FIX IT\r | |
203 | STARTD /WEE ONLY NEED THE MANTISSA\r | |
204 | FSTA #DX\r | |
205 | STARTF /FORTRAN COMPATABLE\r | |
206 | FLDA% YPOINT\r | |
207 | ALN 0 /FIX IT\r | |
208 | STARTD /WEE ONLY NEED THE MANTISSA\r | |
209 | FSTA #DY\r | |
210 | STARTF /FORTRAN COMPATABLE\r | |
211 | FLDA% PPOINT\r | |
212 | ATX 0 /GIVE IPEN TO PDP\r | |
213 | TRAP4 #DELTA2 /CALL PDP\r | |
214 | GOBAC, 0;0 /RETURN\r | |
215 | /\r | |
216 | /\r | |
217 | /\r | |
218 | / PLOTTER INTERUPT SERVICE\r | |
219 | /\r | |
220 | EXEC, 0 /PLOTTER SERVICE\r | |
221 | TAD MOV /ARE WE READY AND WAITING ?\r | |
222 | SNA\r | |
223 | JMP NOTRED /NO, CHECK FOR TERMINATION\r | |
224 | 6506 /YES, DOIT AND USE TIME TILL NEXT INTERUPT\r | |
225 | CLL CLA\r | |
226 | TADZ NC+1 /ARE WE DONE ?\r | |
227 | SNA CLA /WE NEED CHECK ONLY THE HIGH ORDER BITS\r | |
228 | JMP .+3 /YES\r | |
229 | JMS GEN /GENERATE NEXTVE\r | |
230 | JMP% EXEC /RETURN\r | |
231 | DCA MOV /CLEAR FLAG\r | |
232 | JMP% EXEC\r | |
233 | \f/\r | |
234 | /THE PDP COMES HERE TWICE IN THE LIFE OF A LINE,\r | |
235 | /ONCE TO START IT, AND ONCE TO FINISH IT\r | |
236 | /\r | |
237 | NOTRED, TADZ NC+1\r | |
238 | SNA CLA /LAST INCREMENT FOR THIS LINE, OR FIRST\r | |
239 | JMP DONE /LAST\r | |
240 | JMS GEN /GET FIRST MOVE\r | |
241 | JMP EXEC+1 /DO IT\r | |
242 | DONE, 6502 /CLEAR PLOTTER FLAG\r | |
243 | DCAZ BZFLG /SAY WE ARE DONE\r | |
244 | CDF CIF 0\r | |
245 | JMP% HNGLOC+1 /RESTORE OR RETURN\r | |
246 | /\r | |
247 | /\r | |
248 | GEN, 0 /BEST LINE GENERATION\r | |
249 | SWP /SAVE THE MQ\r | |
250 | DCA MQSAVE\r | |
251 | DPSZ /CHECK MODE\r | |
252 | CMA /MODE A\r | |
253 | DCA EAEM\r | |
254 | SWAB /EAE DP \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0[\7f\11`\13-\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\15) qS\1e\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0S | |
255 | \12?) | |
256 | \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\09i",".\0\0\0\0\0\0\0\0\0\0\0\0d=\ 1\ 3.\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0d\0\0\0\14\ 4\0\0\0\0\0\0\0\0\0\0\0\0S% \0 \ e\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0.<!\0\ 6\ e\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0*^\10\0\19\f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0w\17!\0%\f\19_\0Y\1a\1e\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0r<\11\0\11\ f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0'^ \0$\f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0JP"\0\b\ fp^\0\0\a\f\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@D"t\0.\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0g^ \0"\f\0\0\0\0\0\0\0\0\0\0\0\0@w 7\12\ e\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ATCH@ CONTROL WORDS FOR THE ACTUAL DETERMINATION\r | |
257 | /AND EXECUTION OF THE APPROPRIATE VECTOR STROKES TO\r | |
258 | /BE DISPLAYED ON THE PLOTTER\r | |
259 | /\r | |
260 | /EDUCATE RALF TO THE 8E\r | |
261 | MQL=7421\r | |
262 | MQA=7501\r | |
263 | BSW=7002\r | |
264 | SECT8 #GENC /MAKE IT RELOCATABLE\r | |
265 | #SEL, 0\r | |
266 | TAD X /CHARACTER CODE\r | |
267 | AND M77 /GET LOWER 6 BITS\r | |
268 | CLL RAL /*2\r | |
269 | TAD SARP+1 /POINTER INTO TABLE\r | |
270 | DCA A\r | |
271 | TAD SARP /GET FIELD\r | |
272 | CLL RTL /IF THIS WERE A GOOD ASSMEBLER, THE LOADER WOULD DO IT\r | |
273 | RAL\r | |
274 | TAD SCDF\r | |
275 | DCA .+1\r | |
276 | HLT\r | |
277 | TAD% A /THIS IS THE MASK WORD\r | |
278 | AND M7 /MASK OFF MASK BITS\r | |
279 | CLL RAL /*2\r | |
280 | DCA B\r | |
281 | TAD B\r | |
282 | CLL RAL /*4\r | |
283 | TAD B /*6 NOW\r | |
284 | TAD MASKP+1 /6 TIMES MASK + MASK POINTER\r | |
285 | TAD MS1 /FOR RELOCATABILITY\r | |
286 | DCA C /PTR FOR MASK ADDRESSES\r | |
287 | TAD% A\r | |
288 | CLL RAR\r | |
289 | DCA B /SETS INTENSIFY BLANKING BITS, FIRST ALWAYS BLANKED\r | |
290 | ISZ A\r | |
291 | TAD% A /CONTROL WORD\r | |
292 | DCA A\r | |
293 | DCA H /SETS LEFT HALF\r | |
294 | TAD MASKP /RESET FIELD FOR #CGEN\r | |
295 | CLL RAL\r | |
296 | RTL\r | |
297 | TAD SCDF\r | |
298 | DCA VA-1\r | |
299 | CDF CIF 0 /RETURN BECAUSE WORD SET UP\r | |
300 | JMP% #SEL\r | |
301 | /\r | |
302 | /\r | |
303 | /A RETURN VALUE IN IPEN OF 7 MEANS LAST STROKE.\r | |
304 | /THIS ROUTINE SENDS BACK THE VECTOR STROKES UNTILL THE CHARACTER IS DRAWN.\r | |
305 | /\r | |
306 | #CGEN, 0\r | |
307 | HLT\r | |
308 | VA, TAD H\r | |
309 | CIA\r | |
310 | DCA H /RESET HALFWORD SWITCH\r | |
311 | ISZ H\r | |
312 | ISZ C /ADVANCE PTR ON ZERO H\r | |
313 | TAD A\r | |
314 | SNA /TEST NEXT CONTROL BIT\r | |
315 | JMP NXTSP /ZERO MEANS ALL VECTORS WERE EXECUTED, SO EXIT\r | |
316 | CLL RAL\r | |
317 | DCA A /NEXT CONTROL BIT IN LINK\r | |
318 | SNL\r | |
319 | JMP VA /NOT AN EXECUTION\r | |
320 | TAD H /0 IF RIGHT HALF, 1 IF LEFT HALF\r | |
321 | CLL RAR /INTO LINK\r | |
322 | TAD% C /GET MASK ADDRESS\r | |
323 | SNL\r | |
324 | JMP .+2 /R.H\r | |
325 | BSW /LH\r | |
326 | MQL /SAVE IT\r | |
327 | MQA /GET IT BACK\r | |
328 | RTR\r | |
329 | RAR\r | |
330 | AND M7\r | |
331 | DCA X /X DESTINATION\r | |
332 | MQA\r | |
333 | AND M7\r | |
334 | DCA Y /Y DESTINATION\r | |
335 | TAD B\r | |
336 | CLL RAL\r | |
337 | DCA B /RETRIEVE BLANKING BIT INTO LINK\r | |
338 | RAL /INTO BIT 11\r | |
339 | CIA /MAKE MINUS\r | |
340 | TAD K3\r | |
341 | DCA IPEN\r | |
342 | HOME, CIF CDF 0\r | |
343 | JMP% #CGEN /GO BACK\r | |
344 | /\r | |
345 | /COMES HERE WHEN DONE WITH CHARACTER\r | |
346 | NXTSP, TAD M7 /WEIRD IPEN MEANS DONE\r | |
347 | DCA IPEN\r | |
348 | 7327 /SPACE 6 SEGMENTS OVER FOR NEXT CHARACTER\r | |
349 | DCA X\r | |
350 | CLL CLA IAC /Y STARTS AT ONE\r | |
351 | DCA Y\r | |
352 | JMP HOME\r | |
353 | /\r | |
354 | A, 0 /CONTROL WORD\r | |
355 | C, 0 /MASK POINTER\r | |
356 | H, 0 /HALFWORD SWITCH\r | |
357 | B, 0 /MASK WORD\r | |
358 | MASKP, ADDR MASK0\r | |
359 | SARP, ADDR #SARQ\r | |
360 | M7, 7\r | |
361 | M77, 77\r | |
362 | K3, 3\r | |
363 | MS1, -1\r | |
364 | SCDF, CDF 0\r | |
365 | X, 0 /ALSO XR0\r | |
366 | Y, 0\r | |
367 | IPEN, 0\r | |
368 | /\r | |
369 | /\r | |
370 | /ALIGN THE MASKS ON A BOUNDRY SO WE DONT CROSS A FIELD\r | |
371 | SECT8 #CHINT\r | |
372 | /THE FOLLOWING PARTS ARE THE CHARACTER TABLES FOR THE CHARACTER\r | |
373 | /GENERATOR.\r | |
374 | /CHARACTER MASK COORDINA\r | |
375 | MASK0, 0301 /D,J,5,_,",[\r | |
376 | 2143\r | |
377 | 4145\r | |
378 | 2705\r | |
379 | 0747\r | |
380 | 0301\r | |
381 | MASK1, 0701 /L,U,V,W,X,Y,I,T,N,M,0,1,(,),[\r | |
382 | 0706\r | |
383 | 2447\r | |
384 | 2724\r | |
385 | 2141\r | |
386 | 0147\r | |
387 | MASK2, 0141 /2,5,4,9,7,Z,$,/,#,<,\r | |
388 | 0747\r | |
389 | 4404\r | |
390 | 0747\r | |
391 | 0141\r | |
392 | 2127\r | |
393 | MASK3, 0424 /A,C,E,F,G,H,K,0,Q,R,P,3,6,8,L,B\r | |
394 | 3444\r | |
395 | 4147\r | |
396 | 0701\r | |
397 | 4144\r | |
398 | 2404\r | |
399 | MASK4, 2622 /**,B.A.,-,+,*\r | |
400 | 4305\r | |
401 | 4503\r | |
402 | 0426\r | |
403 | 4404\r | |
404 | 0 /SPACE FOR SHORT MASK\r | |
405 | MASK5, 4525 /\,!,=\r | |
406 | 0503\r | |
407 | 2343\r | |
408 | 4721\r | |
409 | 2707\r | |
410 | 0141\r | |
411 | MASK6, 0627 /@,@,>,^,+,+,,,\r | |
412 | 2525\r | |
413 | 4524\r | |
414 | 2323\r | |
415 | 1121\r | |
416 | 2147\r | |
417 | /\r | |
418 | /\r | |
419 | /THE FIRST ROUTINE IS THE FORTRAN CALLABLE SUBROUTINE WHICH SELECTS\r | |
420 | /WHICH CHARACTER IS TO BE PLOTTED BY CALLS TO THE SECOND.\r | |
421 | /\r | |
422 | /THE FORM IS: CALL SELCQ(ICHAR)\r | |
423 | /WHERE ICHAR IS THE CODE OF THE CHARACTER TO BE PLOTTED\r | |
424 | /\r | |
425 | SELBASE, F 0.0\r | |
426 | XPOINT, F 0.0\r | |
427 | YPOINT, F 0.0\r | |
428 | APOINT, F 0.0\r | |
429 | /\r | |
430 | ENTRY SELCQ\r | |
431 | SELCQ, BASE 0\r | |
432 | STARTD /FOR ARG PICKUP\r | |
433 | FLDA 30\r | |
434 | FSTA GOBAC\r | |
435 | FLDA 0\r | |
436 | SETB SELBASE\r | |
437 | BASE SELBASE\r | |
438 | SETX X /ARGUMENT TRANSFER IS THRU THE X REGISTERS\r | |
439 | LDX 1,1\r | |
440 | FSTA SELBASE /POINTER TO ARGAD\r | |
441 | FLDA% SELBASE,1\r | |
442 | FSTA SELBASE\r | |
443 | STARTF\r | |
444 | FLDA% SELBASE,0\r | |
445 | ATX 0 /FIX\r | |
446 | TRAP4 #SEL /GOTO PDP ROUTINE\r | |
447 | GOBAC, 0;0 /RETURN\r | |
448 | /\r | |
449 | /\r | |
450 | /\r | |
451 | /CALLS ARE MADE TO THIS NEXT ROUTINE UNTIL THE THIRD ARGUMENT IS RETURNED\r | |
452 | /EQUAL TO 7. THE CALL IS:\r | |
453 | / CALL CQXY(X,Y,IPEN)\r | |
454 | /WHERE X IS THE X COORDANATE OF THE END POINT OF THE NEXT VECTOR,\r | |
455 | /Y IS THE Y CORDANATE, AND IPEN IS A CONTROL PARAMENTER.\r | |
456 | /THE RETURNED POINT (X,Y) IS RELATIVE TO (0,1)\r | |
457 | /\r | |
458 | ENTRY CQXY\r | |
459 | CQXY, BASE 0\r | |
460 | STARTD\r | |
461 | FLDA 30\r | |
462 | FSTA #GOBAC\r | |
463 | FLDA 0\r | |
464 | SETB SELBASE\r | |
465 | BASE SELBASE\r | |
466 | SETX X /FOR ARGUMENT TRANSFER\r | |
467 | LDX 0,1\r | |
468 | FSTA SELBASE /POINTER-1 TO ARG LIST\r | |
469 | FLDA% SELBASE,1+\r | |
470 | FSTA XPOINT\r | |
471 | FLDA% SELBASE,1+\r | |
472 | FSTA YPOINT\r | |
473 | FLDA% SELBASE,1+\r | |
474 | FSTA APOINT\r | |
475 | STARTF\r | |
476 | TRAP4 #CGEN /CALL PDP PART\r | |
477 | XTA 0 /X OFFSET\r | |
478 | FSTA% XPOINT\r | |
479 | XTA 1 /Y\r | |
480 | FSTA% YPOINT\r | |
481 | XTA 2 /IPEN\r | |
482 | FSTA% APOINT\r | |
483 | #GOBAC, 0;0\r | |
484 | /\r | |
485 | / CHARACTER DISPATCH TABLE\r | |
486 | /\r | |
487 | SECT8 #SARQ\r | |
488 | LISTOFF\r | |
489 | 7745 /\\r | |
490 | 6347\r | |
491 | 5603 /A\r | |
492 | 4760\r | |
493 | 7703 /B\r | |
494 | 2175\r | |
495 | 7003 /C\r | |
496 | 0170\r | |
497 | 7700 /D\r | |
498 | 3551\r | |
499 | 5603 /E\r | |
500 | 5170\r | |
501 | 5403 /F\r | |
502 | 5160\r | |
503 | 7603 /G\r | |
504 | 0176\r | |
505 | 5203 /H\r | |
506 | 4760\r | |
507 | 5201 /I\r | |
508 | 1156\r | |
509 | 7000 /J\r | |
510 | 5404\r | |
511 | 6503 /K\r | |
512 | 6172\r | |
513 | 6003 /L\r | |
514 | 0070\r | |
515 | 7401 /M\r | |
516 | 3304\r | |
517 | 7001 /M\r | |
518 | 3005\r | |
519 | 7403 /O\r | |
520 | 0370\r | |
521 | 7403 /P\r | |
522 | 4560\r | |
523 | 7603 /Q\r | |
524 | 2370\r | |
525 | 7503 /R\r | |
526 | 4572\r | |
527 | 7602 /S\r | |
528 | 6360\r | |
529 | 5001 /T\r | |
530 | 1150\r | |
531 | 7001 /U\r | |
532 | 6005\r | |
533 | 6001 /V\r | |
534 | 4011\r | |
535 | 7401 /W\r | |
536 | 6205\r | |
537 | 5001 /X\r | |
538 | 1007\r | |
539 | 6401 /Y\r | |
540 | 1330\r | |
541 | 7002 /Z\r | |
542 | 0074\r | |
543 | 7001 /]\r | |
544 | 0154\r | |
545 | 4002 /\r | |
546 | 0044\r | |
547 | 7000 /[\r | |
548 | 3050\r | |
549 | 5404 /0**\r | |
550 | 6070\r | |
551 | 6404 /B.A.\r | |
552 | 2074\r | |
553 | 0000 /SP\r | |
554 | 4000 /EXECUTE 1 @INVISIBLE@ VECTOR STROKES.\r | |
555 | 5006 /+\r | |
556 | 2046\r | |
557 | 5006 /=\r | |
558 | 3201\r | |
559 | 5245 /!\r | |
560 | 5572\r | |
561 | 7642 /$\r | |
562 | 6363\r | |
563 | 6740 /"\r | |
564 | 1675\r | |
565 | \f6760 /_\r | |
566 | 3637\r | |
567 | 4006 /=\r | |
568 | 3000\r | |
569 | 6001 /(\r | |
570 | 0124\r | |
571 | 6001 /)\r | |
572 | 1202\r | |
573 | 52 /*\r | |
574 | 7700\r | |
575 | 5004 /+\r | |
576 | 6014\r | |
577 | 4006 /,\r | |
578 | 0030\r | |
579 | 4004 /-\r | |
580 | 0014\r | |
581 | 4006 /.\r | |
582 | 0060\r | |
583 | 4002 //\r | |
584 | 4400\r | |
585 | 7601 /0\r | |
586 | 3107\r | |
587 | 6401 /1\r | |
588 | 0456\r | |
589 | 7602 /2\r | |
590 | 1714\r | |
591 | 5503 /3\r | |
592 | 4770\r | |
593 | 6402 /4\r | |
594 | 0364\r | |
595 | 7600 /5\r | |
596 | 3434\r | |
597 | 7603 /6\r | |
598 | 0175\r | |
599 | 6002 /7\r | |
600 | 0070\r | |
601 | 5703 /8\r | |
602 | 4770\r | |
603 | 7402 /9\r | |
604 | 0364\r | |
605 | 5006 /^\r | |
606 | 1460\r | |
607 | 5006 />\r | |
608 | 1430\r | |
609 | 6002 /<\r | |
610 | 2120\r | |
611 | 5005 /=\r | |
612 | 5500\r | |
613 | 6002 /\r | |
614 | 4240\r | |
615 | 7506 /+\r | |
616 | 6346\r | |
617 | LISTON\r | |
618 | END\r | |
619 | \1a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 |