A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rka / paroff / plot1.ra
CommitLineData
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
22DX=160\r
23#DY, 0;0 /DP DY\r
24DY=162\r
25/\r
26/ THE REST ARE VALUES FOR LINE GENERATION\r
27/\r
28NT=164\r
29NC=166\r
30NR=170\r
31NA=172\r
32DAC=174\r
33/\r
34 ORG 176\r
35BZFLG, 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
42SWAB=7431\r
43SWBA=7447\r
44SHL=7413\r
45DAD=7443\r
46DST=7445\r
47DLD=7663\r
48DPIC=7573\r
49DCM=7575\r
50DPSZ=7451\r
51CAM=7621\r
52MQA=7501\r
53MQL=7421\r
54SWP=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
88OK, 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
104NOPEN, DCA IPEN /SAVE IT\r
105/\r
106/THE NEXT CODE IS ONCE ONLY\r
107/\r
108PINIT, 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
114JMPIN, 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
148NULL, 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
152PENL, HLT\r
153 CIF CDF 0 /INTERUPTS WILL TAKE IT FROM HERE\r
154 JMP% #DELTA\r
155PENCO, 6505\r
156MY, 40 /MINUS Y MOVE\r
157IPEN, 0 /PEN CODE AND XR0\r
158XSGN, 0 /SIGN OF X AND XR1\r
159YSGN, 0\r
160ESWCH, 0\r
161MAJ, /MAJOR PLOTTER MOVE\r
162WAITR, ADDR #WAIT\r
163 EXTERN ONQI /SYSTEM ROUTINE TO ENTER SKIP CHAIN\r
164COMB, /COMBINED PLOTTER MOVE\r
165ONQI2, 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
180BDELTA, F 0.0 /BASE PAGE\r
181XPOINT, F 0.0 /POINTERS TO ARGS\r
182YPOINT, F 0.0 /POINTERS TO ARGS\r
183PPOINT, F 0.0 /POINTERS TO ARGS\r
184DELTAP, 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
214GOBAC, 0;0 /RETURN\r
215/\r
216/\r
217/\r
218/ PLOTTER INTERUPT SERVICE\r
219/\r
220EXEC, 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
237NOTRED, 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
242DONE, 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
248GEN, 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
261MQL=7421\r
262MQA=7501\r
263BSW=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
308VA, 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
342HOME, CIF CDF 0\r
343 JMP% #CGEN /GO BACK\r
344/\r
345/COMES HERE WHEN DONE WITH CHARACTER\r
346NXTSP, 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
354A, 0 /CONTROL WORD\r
355C, 0 /MASK POINTER\r
356H, 0 /HALFWORD SWITCH\r
357B, 0 /MASK WORD\r
358MASKP, ADDR MASK0\r
359SARP, ADDR #SARQ\r
360M7, 7\r
361M77, 77\r
362K3, 3\r
363MS1, -1\r
364SCDF, CDF 0\r
365X, 0 /ALSO XR0\r
366Y, 0\r
367IPEN, 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
375MASK0, 0301 /D,J,5,_,",[\r
3762143\r
3774145\r
3782705\r
3790747\r
3800301\r
381MASK1, 0701 /L,U,V,W,X,Y,I,T,N,M,0,1,(,),[\r
3820706\r
3832447\r
3842724\r
3852141\r
3860147\r
387MASK2, 0141 /2,5,4,9,7,Z,$,/,#,<,\r
3880747\r
3894404\r
3900747\r
3910141\r
3922127\r
393MASK3, 0424 /A,C,E,F,G,H,K,0,Q,R,P,3,6,8,L,B\r
3943444\r
3954147\r
3960701\r
3974144\r
3982404\r
399MASK4, 2622 /**,B.A.,-,+,*\r
4004305\r
4014503\r
4020426\r
4034404\r
404 0 /SPACE FOR SHORT MASK\r
405MASK5, 4525 /\,!,=\r
4060503\r
4072343\r
4084721\r
4092707\r
4100141\r
411MASK6, 0627 /@,@,>,^,+,+,,,\r
4122525\r
4134524\r
4142323\r
4151121\r
4162147\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
425SELBASE, F 0.0\r
426XPOINT, F 0.0\r
427YPOINT, F 0.0\r
428APOINT, F 0.0\r
429/\r
430 ENTRY SELCQ\r
431SELCQ, 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
447GOBAC, 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
459CQXY, 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
4897745 /\\r
4906347\r
4915603 /A\r
4924760\r
4937703 /B\r
4942175\r
4957003 /C\r
4960170\r
4977700 /D\r
4983551\r
4995603 /E\r
5005170\r
5015403 /F\r
5025160\r
5037603 /G\r
5040176\r
5055203 /H\r
5064760\r
5075201 /I\r
5081156\r
5097000 /J\r
5105404\r
5116503 /K\r
5126172\r
5136003 /L\r
5140070\r
5157401 /M\r
5163304\r
5177001 /M\r
5183005\r
5197403 /O\r
5200370\r
5217403 /P\r
5224560\r
5237603 /Q\r
5242370\r
5257503 /R\r
5264572\r
5277602 /S\r
5286360\r
5295001 /T\r
5301150\r
5317001 /U\r
5326005\r
5336001 /V\r
5344011\r
5357401 /W\r
5366205\r
5375001 /X\r
5381007\r
5396401 /Y\r
5401330\r
5417002 /Z\r
5420074\r
5437001 /]\r
5440154\r
5454002 /\r
5460044\r
5477000 /[\r
5483050\r
5495404 /0**\r
5506070\r
5516404 /B.A.\r
5522074\r
5530000 /SP\r
5544000 /EXECUTE 1 @INVISIBLE@ VECTOR STROKES.\r
5555006 /+\r
5562046\r
5575006 /=\r
5583201\r
5595245 /!\r
5605572\r
5617642 /$\r
5626363\r
5636740 /"\r
5641675\r
565\f6760 /_\r
5663637\r
5674006 /=\r
5683000\r
5696001 /(\r
5700124\r
5716001 /)\r
5721202\r
57352 /*\r
5747700\r
5755004 /+\r
5766014\r
5774006 /,\r
5780030\r
5794004 /-\r
5800014\r
5814006 /.\r
5820060\r
5834002 //\r
5844400\r
5857601 /0\r
5863107\r
5876401 /1\r
5880456\r
5897602 /2\r
5901714\r
5915503 /3\r
5924770\r
5936402 /4\r
5940364\r
5957600 /5\r
5963434\r
5977603 /6\r
5980175\r
5996002 /7\r
6000070\r
6015703 /8\r
6024770\r
6037402 /9\r
6040364\r
6055006 /^\r
6061460\r
6075006 />\r
6081430\r
6096002 /<\r
6102120\r
6115005 /=\r
6125500\r
6136002 /\r
6144240\r
6157506 /+\r
6166346\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