A large commit.
[pdp8.git] / sw / rescue / lab8e_goettingen / disk2_11 / rkb / paroff / x.ra
1 / \ eXYPLOT.RA
2 /
3 / PART TWO OF DEC'S XYPLOT DEC-S8-LPLTA-A-LA JULY 1973 M.HURLEY
4 / INCLUDED IS THE LATEST UPDATE F4 4.AAAA FROM LIBRARY FORLIB.RL NOV 77
5 / COPIED J.J. ANDRES 1.NOV. 1980
6 / PLOTS,XYPLOT,FACTOR,WHERE,SYMBOL,SYMB(FOR NUMBER ONLY)
7 /
8 /
9 / PLOTTER ROUTINES FOR PDP 8
10 /
11 / VER 1.0 1.NOV. 1980 H.A.
12 / VER 2.0 12.NOV 1980 H.A.
13 / VER 2.1 20.NOV 1980 H.A. CORRECTS BUG IN SYMBOL CONCERNING #XFCTX,#XFCTY
14 / VER 3.0 27.NOV 1980 H.A. INSERTS SYMBOL (999.,999.,....)
15 / VER 3.1 27.NOV.1980 H.A. CORRECTS PEN UP/DOWN TIMING ERROR
16 / VER 3.2 18.JAN.1981 H.A. CORRECTS WHERE AND OVERLAY PROBLEMS
17 / VER 3.3 4.AUG.1982 H.A. REDUCES NUMBER OF EXTERNAL REFERENCES
18 /
19 / UPDATES:
20 / 1. PLEXIT LOCKED OUT THE PLOTTER.
21 / 2. PLOTS DIDN'T DROVE PLOTTER TO THE ORIGIN
22 / * #XONCE IS REMOVED, SO #XNTST IS CALLED FROM PLOTS ALL TIMES
23 / 1-NOV-80 H.A.
24 / 3. FACTOR DID NOT WORK CORRECT ALL THE TIMES.
25 / FACTOR(1),XYPLOT(1,1),FACTOR(2),XYPLOT(1,1) DID NOT WORK
26 / 4. TRUNCATION ERROR IN XYPLOT CAUSED ROUNDING PROBLEMS:
27 / XSTEPS=INT(INT(X/#XINCR)*FACTOR)
28 / * FACTOR NOW WORKS CORRECT IN ANY CASE
29 / * FACTOR NOW HAS AN OPTIONAL SECOND PARAMETER. IF BOTH PRESENT
30 / * THEY SPECIFY THE X-FACTOR AND THE Y-FACTOR.
31 / * A NEGATIVE FACTOR IS NO MORE VALID YET. (ERROR WALKBACK)
32 / * ZERO FACTOR DISABLES PLOTTING.
33 / * XYPLOT NOW COMPUTES XSTEPS=INT(X/#XINCR*FACTOR)
34 / * WHERE HAS GOT AN OPTIONAL FOURTH PARAMETER FOR THE Y-FACTOR.
35 / * IF X AND Y FACTOR DO NOT MATCH AND THERE ARE ONLY THREE PARAMETERS
36 / * AN ERROR WALKBACK IS TAKEN.
37 / 7-NOV-80 H.A.
38 / 5. SYMBOL CALLS #XMBTB TO LOAD THE SYMBOL TABLE
39 / 12-NOV-80 H.A.
40 / 6. CALLING SYMBOL/NUMBER WITH X/Y EQUAL TO 999. WILL REPLACE THE
41 / 999. WITH THE ACTUAL POSITION OF THE PEN. VERY USEFULL IF YOU
42 / ARE EDITING AN OUTPUT LINE USEING SOME CALLS TO SYMBOL & NUMBER.
43 / IF YOU CALL FACTOR PRIOR TO SYMBOL(999.,....) THEN THE POSITION
44 / OF THE PEN IS NEVER CHANGED PRIOR PLOTTING THE SYMBOL. BUT THE
45 / FACTOR IS USED WHEN PLOTTING THE SYMBOL.
46 / 27-NOV-80 H.A.
47 / 7. EACH TIME XYPLOT WAS CALLED IT ISSUED A PEN UP/DOWN COMMAND.
48 / THIS CAUSED A STEP BY STEP MOVING OF THE PEN ALTHOUGH THE
49 / DIRECTION WAS NOT CHANGED. INTERFACE PROBLEM.
50 / NOW WE ISSUE THE PEN MOVE COMMAND ONLY WHEN WE WANT TO CHANGE
51 / THE DIRECTION OF THE PEN. THIS SPEEDS UP THE PLOTTER!
52 / * NOT VALID PEN VALUES (NOT -3 TO 3) CAUSE #ARGERR WITH X0 =1
53 / 27-NOV-80 H.A. A HARD DAY'S NIGHT.... AND MIDNIGHT TOO!
54 / 8. REMOVES BUG IN WHERE ROUTINE
55 / 9. TOO LARGE DELTA X (DELETA Y) CAUSE #ARGER WITH X0=2 (3)
56 / 18-JAN-81 H.A.
57 /
58 \f/
59 / FPP CODE PART CONTAINING PLOTS,PLOT,PLEXIT,WHERE,FACTOR
60 / THIS PROGRAM MAY BE PLACED INTO AN OVERLAY.
61 / IT REFERENCES THE PROGRAM PDPPLT LOCATED IN FIELD 1.
62 /
63 SECT #XYPLT
64 /
65 / REFERENCES INTO FRTS (FIELD 0)
66 /
67 EXTERN #ARGER / WRONG NUMBER OF PARAMETERS
68 EXTERN #REW
69 EXTERN #WRITO
70 EXTERN #RSVO
71 EXTERN #RENDO
72 /
73 / REFERENCES INTO FIELD 1 (PDPPLT)
74 /
75 EXTERN #XETXR
76 EXTERN #XETUP
77 EXTERN #XDPXR
78 EXTERN #XATIO
79 EXTERN #XNPLT
80 EXTERN #XCHTP
81 EXTERN #XCHCK
82 EXTERN #XNTST
83 EXTERN #XDNCK
84 EXTERN #XORGX / LAST ABSOLUTE ORIGIN IN PLOTTER STEPS X (REAL)
85 #XORGY= #XORGX+3
86 #XABSX= #XORGY+3 / ACTUAL ABSOLUTE X POSITION IN STEPS (REAL)
87 #XABSY= #XABSX+3
88 #XOLDP= #XABSY+3 / OLD PEN STATUS
89 #XXOLD= #XOLDP+3 / OLD XPT WITH EFFECT OF FACTOR
90 #XYOLD= #XXOLD+3 / OLD YPT WITH EFFECT OF FACTOR
91 #XPENC= #XYOLD+3 / OLD PEN STATUS ( USED BY SYMBOL, NUMBER)
92 #XINCX= #XPENC+3 / INCREMENT SIZE FOR X STEP MOTOR OF PLOTTER
93 #XINCY= #XINCX+3 / INCREMENT SIZE FOR Y STEP MOTOR OF PLOTTER
94 #XFCTX= #XINCY+3 / X - FACTOR
95 #XFCTY= #XFCTX+3 / Y - FACTOR
96 /
97 / HERES THE INITIALIZATION ROUTINE
98 / STANDARD CALLING SEQUENCE, SHARED BY ALL SUBROUTINES
99 /
100 XRPLOT, 0 / MULTI PURPOSE XRS
101 X0= 0 / AT #ARGER X0 HOLDS THE XYPLOT ERROR NUMBER
102 X1= 1
103 XR1, 0
104 XR2, 0
105 XR3, 0
106 XR4, 0
107 XR5, 0
108 XR6, 0 / NOT USED
109 X7= 7
110 XR7, 0 / NUMBER OF PARAMETERS AT SUBROUTINE CALL
111 WBW, TEXT #XYPLOT# / WALK BACK WORD
112 PLOTXR, SETX XRPLOT
113 SETB BPPLOT
114 BPPLOT, FNOP
115 0
116 0
117 TERM2, F 0.
118 YPT, F 0. / VALUE ACTUALLY PLOTTED WITH EFFECT OF FACTOR
119 XPT, F 0. / X VALUE ACTUALLY PLOTTED WITH EFFECT OF FACTOR
120 TERM1, F 0.
121 ARG1, F 0.
122 ARG2,
123 YDIFF, F 0. / PEN VALUE
124 ORG 10*3+BPPLOT
125 FNOP
126 JA PLOTXR
127 ORG .+1 / TO MAKE A 3 WORD BASE ENTRY FOR PLTRTN
128 PLTRTN, JA .
129 MAJOR, F 0. / HORIZONTAL AXIS MOVE
130 MINOR, F 0. / DIAGONAL AXIS MOVE
131 XACT, F 0.
132 YACT, F 0. / HOLDS X,Y VALUES TYPED IN
133 XDIFF, F 0 / DELTA X
134 P1, F 1.
135 PF2, F 2.
136 P3, F 3.
137 P4, F 4.
138 PF7, F 7.
139 PT5, F .5
140 PORS, F 0. / =1 IF ENTERED FROM SYMBOL ROUTINE
141 XCHRPT, F 0. / X,Y VALUES FROM PDP TABLES
142 YCHRPT, F 0.
143 NUMENT, F 0. / INDICATES ENTRY FROM NUMBER SUBROUTINE
144 COSANG, F 0.
145 SINANG, F 0.
146 DEGRAD, F 0.017453293 / RADIANS TO DEGREES
147 F999, F 999.
148 F100, F 100.
149 XREAL, F 0. / FOR ORIGIN AND WHERE RTN
150 YREAL, F 0.
151 CENTSY, F 0. / CENTERED SYMBOL INDICATOR
152 NUMSYM, F 0. / NO. OF CHARACTERS TO PLOT
153 ANGADJ, F 0.
154 P22, F 18. / 22 OCTAL=18 DECIMAL
155 TWO, 0;2;0 / CONSTANT
156 F4095, F 4095. / LARGEST NUMBER FITTING INTO 12 BITS PDP 8 WORD
157 /
158 / - - - - - - - - - - - - -
159 \f 0
160 SYMSTR, JA . / SYMBOL ENTRY
161 JA SYMST / NEEDED TO PICK UP 2 WORD ADDRESSES
162 0
163 BASE 0
164 /
165 / SET UP THE BASE PAGE AND INDEX REGISTERS FOR THE PLOT ROUTINES
166 / PLOTS,XYPLOT,WHERE,FACTOR AND SYMBOL
167 /
168 /
169 PLTSTR, JA . / SAVE TWO WORDS FOR RETURN
170 STARTD
171 FLDA 3*10 / SAVE CALLERS RETURN ARGUMENT LIST
172 FSTA PLTRTN
173 FLDA% 0 / COMPUTE THE NUMBER OF PARAMETERS
174 FSUB 0
175 FSUB# TWO
176 SETX XRPLOT
177 LDX 1,1 / DIVIDE BY TWO
178 ALN 1
179 FNEG / MAKE COUNTER
180 ATX X7 / AND BUMP INTO X7
181 FLDA 0 / POINTER TO THE PARAMETER LIST --> FAC
182 SETB BPPLOT
183 BASE BPPLOT
184 FSTA ARG1 / POINTER TO PARAMETER LIST --> ARG1
185 JA PLTSTR / 1 --> X1, INDEX TO PARAMETER LIST
186 \f/
187 / XYPLOT SUBROUTINE
188 / CALL XYPLOT (XPT,YPT,PENCMD)
189 /
190 / REAL XPT,YPT AND MUST BE POSSIBLE TO FIX INTO 24 BIT NUMBER
191 / INTEGER PENCMD (-3,-2,2,3 AND NOTHING ELSE)
192 /
193 / ARGERR ERRORS:
194 / 1 BAD PENCMD
195 / 2 DELTA X EXCEEDS 4095
196 / 3 DELTA Y EXCEEDS 4095
197 / 4 XPT UNNORMALIZED OR TO LARGE ( FOR 24 BIT FRACTIONAL)
198 / 5 YPT "" "" "
199 /
200 /
201 ENTRY XYPLOT
202 WB0, TEXT 'XYPLOT' / INSERT THE CORRECT WALK BACK WORD
203 XYPLOT,
204 FLDA# WB0 / INSERT THE CORRECT WALK BACK WORD
205 FSTA WBW / IN FRONT OF THE BASE PAGE
206 JSA PLTSTR / SET UP THE BASE PAGE AND X REGISTERS
207 SYMENT, FLDA% ARG1,1
208 FSTA XPT
209 FLDA% ARG1,1+
210 FSTA YPT
211 FLDA% ARG1,1+
212 FSTA YDIFF / VALUE OF PEN
213 STARTF
214 FLDA% XPT / X POINT
215 FDIV #XINCX / ALL INTERNAL CALCULATIONS DONE IN TERMS OF
216 / PLOTTING INTERVALS, HENCE INTEGERS SO
217 FMUL #XFCTX
218 / SAVE STEPS DONE
219 FSTA XACT / TEMP SAVE OF FAC
220 FADD #XORGX / REMEMBER THE X OFFSET
221 FSTA #XABSX / ABSOLUTE NUMBER OF STEPS IN REAL
222 FLDA XACT / RESTORE FAC
223 /
224 JAL XPTERR / IF IT IS IMPOSSIBLE TO FIX XPT THEN ERROR OFF
225 JA XPTOK
226 XPTERR, LDX 4,X0 / WITH #ARGER 4
227 TRAP4 #ARGER
228 XPTOK,
229 JSA MAKINT / INTERGERIZE IT
230 FSTA XACT / WITH FACTOR
231 FSTA XPT / WITH EFFECT OF FACTOR
232 FLDA% YPT
233 FDIV #XINCY
234 FMUL #XFCTY
235 FSTA YACT
236 FADD #XORGY / ADD THE ORIGIN Y
237 FSTA #XABSY / HERE WE STORE THE ABSOLUTE NUMBER OF STEPS DONE
238 FLDA YACT / RESTORE FAC
239 /
240 JAL YPTERR / IF IT IS IMPOSSIBLE TO FIX YPT THEN WE ERROR OFF
241 JA YPTOK
242 YPTERR, LDX 5,X0 / WITH #ARGERR 5
243 TRAP4 #ARGER
244 YPTOK,
245 JSA MAKINT / INTERGERIZE IT
246 FSTA YACT
247 FSTA YPT / WITH EFFECT OF FACTOR
248 FLDA% YDIFF / 2=DOWN, 3=UP, NEG=NEW ORG
249 FSTA #XPENC
250 JGE MORPEN
251 FNEG
252 MORPEN, JSA MAKINT
253 SETX #XETXR
254 ATX 0 / ABS VALUE PEN
255 XTA 0 / FOR THE FPP SIMULATOR
256 SETX XRPLOT
257 FSTA YDIFF / SAVE NEW STATUS OF PEN
258 FSUB P3 / PASS ONLY 0-3
259 JLE ALEGAL / GOOD BOY
260 LDX 1,0 / BAD PEN CMD CAUSES XYPLOT ERROR 1
261 TRAP4 #ARGERR / FUCK OFF
262 ALEGAL,
263 FLDA YDIFF / RESTORE THE NEW VALUE OF PEN
264 FSUB #XOLDP / COMPARE WITH THE OLD VALUE
265 JEQ NOCHNG / IF THEY MATCH THEN GOTO NOCHANGE
266 TRAP4 #XETUP / ELSE SET UP THE NEW PEN
267 NOCHNG,
268 FLDA YDIFF / SAVE THE NEW PEN STATUS FOR THE NEXT CALL
269 FSTA #XOLDP
270 JA REALPT
271 /
272 /
273 MAKINT, JA . / FOR ALL THOSE INTEGERIZATIONS REQUIRED
274 FADD PT5 / ROUND THE VALUE
275 ALN 0 / GET RID OF FRACTIONAL PART
276 FNORM / NORMALIZE IT FOR OTHER FPP OPE#XATIONS
277 JA MAKINT
278 \f/ HERES THE CALCULATING PART OF THE PLOT ROUTINES
279 PRERL1, FCLA
280 PREREL, JA . / RTN USED AS SUBROUTINE
281 REALPT, FLDA XPT / AND JA'D TO
282 FSUB #XXOLD / COMPARE NEW X AND OLD
283 FSTA XDIFF
284 JGE ABSDX
285 FNEG
286 ABSDX, FSTA TERM1 / ABS DELTA X
287 /
288 FSUB F4095 / IF THE DELTA X DOESN NOT FIT INTO
289 JLE DXOK / A 12 BIT PDP 8 WORD THEN TAKE ERROR 2
290 LDX 2,0 / ELSE CONTINUE FI
291 TRAP4 #ARGER / HOME TO CCL
292 DXOK, /
293 /
294 FLDA YPT
295 FSUB #XYOLD / SAME FOR Y PNTS
296 FSTA YDIFF
297 JLE DELXY
298 FNEG
299 DELXY, FADDM TERM1 / DX-DY
300 /
301 FNEG / ABS DELTA Y --> FAC
302 FSUB F4095 / IF DELTA Y DOESN'T FIT INTO 12 BITS THEN
303 JLE DYOK / WE ERROR OFF ELSE CONTINUE FI
304 LDX 3,0 / THIS IS ERROR 3
305 TRAP4 #ARGER
306 DYOK,/
307 TRAP3 #WRITO
308 JA UNIX80
309 JA FORM1
310 FLDA #XOLDP / GET ACTUAL PEN STATUS
311 FSUB P3
312 JLT DP0
313 FLDA# SDP / PEN 2 ( PEN UP)
314 JA DP1
315 SDP, TEXT 'P'
316 SDK, TEXT 'K'
317 DP0,
318 FLDA# SDK
319 DP1, TRAP3 #RSVO
320 JA DP4711
321 FLDA #XPENC
322 TRAP3 #RSVO
323 FLDA #XORGX
324 TRAP3 #RSVO
325 FLDA #XFCTX
326 TRAP3 #RSVO
327 FLDA #XINCX
328 TRAP3 #RSVO
329 FLDA XACT
330 TRAP3 #RSVO
331 FLDA #XORGY
332 TRAP3 #RSVO
333 FLDA #XFCTY
334 TRAP3 #RSVO
335 FLDA #XINCY
336 TRAP3 #RSVO
337 FLDA YACT
338 TRAP3 #RSVO
339 DP4711,/
340 FLDA #XABSY / ABSOLUTE NUMBER OF STEPS
341 TRAP3 #RSVO
342 FLDA #XABSX
343 FNEG
344 TRAP3 #RSVO
345 TRAP3 #RENDO
346 JA NX1
347 /FORM1, TEXT #(1X,A1,A6,2(I7,2F9.3,I8),2I6)#
348 FORM1, TEXT #(1X,A1,2I6)#
349 NX1,
350 /
351 FLDA TERM1 / DETERMINE OCTANT + MAJOR AXIS
352 JGT XMAJ
353 FLDA YDIFF / Y AXIS IS MAJOR
354 FSTA MAJOR
355 FLDA XDIFF
356 FSTA MINOR
357 JA KNOWOC
358 XMAJ, FLDA XDIFF / X AXIS MAJOR
359 FSTA MAJOR
360 FLDA YDIFF
361 FSTA MINOR
362 KNOWOC, LDX 2,1 / 2*OCTANT VALUE COLLECTED IN XR1
363 / USES A SPECIAL (NON SEQUENTIAL) ORDERING
364 FLDA XDIFF
365 JLE .+4
366 ADDX 10,1
367 FLDA YDIFF
368 JLE .+4
369 ADDX 4,1
370 FLDA TERM1
371 JLE .+4
372 ADDX 2,1 / KEEP IT IN XR1
373 LDX 0,2
374 FLDA MAJOR / GET MAJOR MOVE
375 JGT POSMAJ / NEED AS ABS. VALUE
376 JEQ NOTHIN / IF NO MAJOR MOVES, THEN NO MOVES
377 FNEG
378 FSTA MAJOR / NO ABS. VALUE
379 POSMAJ, JSA MAKINT
380 SETX #XDPXR
381 ATX 1 / PASS THIS TO PDP CODE
382 SETX XRPLOT
383 / USE 2 WORD #XATIO IN PDP CODE TO DET SEQ OF MOVES
384 FLDA MINOR
385 JGT POSMIN / ABS VALUE
386 JEQ ZROCAS
387 FNEG
388 POSMIN, FDIV MAJOR / FORM #XATIO OF MINOR TO MAJOR MOVES
389 ALN 2
390 ZROCAS, FSTA #XATIO / DOWN TO PDP CODE
391 XTA 1
392 SETX #XDPXR / GET 2*OCTATNT
393 ATX 0
394 SETX XRPLOT
395 / TRAP4 #XNPLT/ CXCX
396 \fNOTHIN, FLDA PORS
397 JEQ REGPLT / 0 MEANS WAS FROM XYPLOT
398 JLT SYMSET / WAS A MOVE IN SYMBOL
399 FCLA / IS FIRST MOVE IN SYMBOL (0 ORG)
400 FSTA #XXOLD
401 FSTA #XYOLD
402 FSTA PORS
403 JA SYMSTR
404 REGPLT, FLDA #XPENC
405 JLT ZEROLD / NEQ MEANS ZERO THE ORG
406 / SET X AND Y FOR NEXT MOVE TO START AT END OF THIS MOVE
407 FLDA XACT
408 FSTA #XXOLD
409 FLDA YACT
410 FSTA #XYOLD
411 JA PLTRTN
412 SYMSET, FLDA XPT / CONT FROM CURRENT POINT
413 FSTA #XXOLD
414 FLDA YPT
415 FSTA #XYOLD
416 JA PRERL1
417 /
418 / NEGATIVE PEN STATUS, SO WE ZERO THE ORIGIN
419 /
420 ZEROLD,
421 FLDA #XABSX / SAVE THE ACTUAL PEN POSITION (MOTOR STEPS)
422 FSTA #XORGX
423 FLDA #XABSY
424 FSTA #XORGY
425 FCLA
426 FSTA #XXOLD
427 FSTA #XYOLD
428 JA PLTRTN
429 ENTRY SYMSTR
430 SYMST,
431 FLDA P1 / ENTERED WITH 36 BIT MODE TURNED ON
432 FSTA PORS / SET THE FROM SYMBOL FLAG
433 STARTD / USED BY SYMBOL FOR ORIGIN PLOT
434 FLDA SYMSTR / GET START OF ARG CHAIN
435 FSTA ARG1
436 LDX 1,1
437 JA SYMENT
438 \f ENTRY WHERE / WITHOUT EFFECT OF FACTOR
439 WB1, TEXT 'WHERE ' / THE WALK BACK WORD
440 WHERE,
441 FLDA# WB1
442 FSTA WBW
443 JSA PLTSTR
444 JXN WH0,7 / NO PARAMETERS AT ALL THEN
445 TRAP4 #ARGER / ABORT THE USER PROGRAM
446 / WARNING: WHERE RETURNS A WRONG RESULT IF YOU CALL FACTOR PRIOR
447 / TO THE WHERE ROUTINE WITHOUT PLOTTING WITH XYPLOT.
448 WH0,
449 FLDA% ARG1,1
450 FSTA TERM1 / ADDRESS OF X (FIRST PARAMETER)
451 FLDA% ARG1,1+
452 FSTA YDIFF / SAVE ADDRESS OF Y (SECOND PARAMETER)
453 STARTF
454 FLDA #XXOLD
455 FMUL #XINCX
456 FDIV #XFCTX / WHERE RETURNS X WITHOUT EFFECT OF FACTOR
457 FSTA% TERM1
458 JXN WH1,7+ / IF ONLY ONE PARAMETER, THEN ABORT USER
459 TRAP4 #ARGER
460 WH1,
461 FLDA #XYOLD
462 FMUL #XINCY
463 FDIV #XFCTY / RETURNED WITHOUT EFFECT OF FACTOR
464 FSTA% YDIFF / SEND BACK THE VALUES
465 JXN WH2,7+ / IF ONLY TWO PARAMETERS, THEN ABORT USER
466 TRAP4 #ARGER
467 WH2,
468 STARTD
469 FLDA% ARG1,1+
470 FSTA ARG2 / ADR. OF X -FACTOR (THIRD PARAMETER)
471 FLDA% ARG1,1+
472 FSTA ARG1 / ADR. OF Y -FACTOR (FOURTH PARAMETER) --> ARG1
473 STARTF
474 FLDA #XFCTX / IF THE X AND Y FACTOR MATCH THEN
475 FSUB #XFCTY
476 JNE WHXYF / WE NEED THREE PARAMETERS ONLY, ELSE WE GO WHXYF
477 FLDA #XFCTX
478 FSTA% ARG2
479 JXN PLTRTN,X7+ / IF THERE ARE ONLY THREE PARAMETERS THEN RETURN
480 FSTA% ARG1 / ELSE INSERT FACTOR INTO FOURTH PARAMETER AND
481 JA PLTRTN / RETURN
482 WHXYF, / WE REQUIRE X AND Y FACTOR PARAMETERS
483 FLDA #XFCTX
484 FSTA% ARG2 / INSERT THE X FACTOR INTO THE OUTPUT
485 JXN WH3,X7+
486 TRAP4 #ARGER / SORRY, BUT THERE ARE NOT ENOUGH ARGUMENTS
487 WH3,
488 FLDA #XFCTY
489 FSTA% ARG1
490 JA PLTRTN
491 ENTRY FACTOR / RESET FACTOR VALUE
492 WB2, TEXT 'FACTOR'
493 FACTOR,
494 FLDA# WB2
495 FSTA WBW
496 JSA PLTSTR
497 JXN FA0,7 / IF THERE ARE NO PARAMETERS AT ALL THEN
498 TRAP4 #ARGER / ABORT USER PROGRAM
499 FA0,
500 FLDA% ARG1,1
501 FSTA ARG2
502 STARTF
503 FLDA% ARG2
504 JGE FA1 / IF NEGATIVE FACTOR THEN
505 TRAP4 #ARGER / ABORT USER PROGRAM ELSE
506 FA1,
507 FSTA #XFCTX / STORE X AND Y FACTOR
508 FSTA #XFCTY / ONE PARAMETER MEANS X&Y GET THE SAME FACTOR
509 JXN FA3,7+
510 JA FACRTN
511 FA3,
512 STARTD / TWO PARAMETERS, GET THE Y FACTOR
513 FLDA% ARG1,1+
514 FSTA ARG2
515 STARTF
516 FLDA% ARG2
517 JGE FA2 / IF NEGATIVE FACTOR THEN
518 TRAP4 #ARGER / ABORT USER PROGRAM
519 FA2,
520 FSTA #XFCTY
521 FACRTN,
522 STARTF
523 JA PLTRTN
524 \f/ MUST DO A PLOTS AS FIRST ROUTINE IN ANY PLOTTING SEQUENCE
525 / USER SPECIFIES INCREMENT AND MACHINE TYPE (0=8/E, 1=12,8/I,8/L)
526 ENTRY PLOTS
527 WB3, TEXT 'PLOTS '
528 /
529 / CONSTANTS USED IN PLOTS
530 /
531 INXYPL, F 0.0095 / INCREMENT SIZE XY PLOTTER
532 INX80Y, F 0.02648 / INCREMENT SIZE X80-SP X DIRECTION (96 CHAR. LINE)
533 INX80X, F 0.03968 / INCREMENT SIZE X80-SP Y DIRECTION (6 STEPS PER LINE)
534 FORM2, TEXT "(' [STP 6'/' MC1'/' P 0 0')"
535 FORM3, TEXT "(' STP 8]')"
536 UNIX80, F 2.
537 /
538 /
539 PLOTS, / CALL PLOTS (PLOTTER TYPE, MACHINE TYPE)
540 /
541 / INTEGER PLOTTER TYPE: 1 XY PLOTTER
542 / 2 X80-SP PRINTER PLOTTER
543 / 3 BOTH (DOESN'T WORK TODAY)
544 / INTEGER MACHINE TYPE: 0 PDP 8/E
545 / 1 OTHER PDP 8 OR 12
546 /
547
548 FLDA# WB3
549 FSTA WBW
550 JSA PLTSTR
551 FLDA% ARG1,1
552 FSTA XPT
553 FLDA% ARG1,1+
554 FSTA ARG1
555 STARTF / THIS ROUTINE SETS UP A LOT OF CONSTANTS
556 FLDA% XPT / LOAD FIRST ARGUMENT (PLOTTER TYPE ) --> FAC
557 / JLE PLTSER / WRONG INPUT PARAMETER, ERROR OFF
558 FSUB P1
559 JGT PLS1
560 FLDA INXYPL / XY PLOTTER INCREMENT
561 FSTA #XINCX
562 FSTA #XINCY
563 JA MACHIN
564 PLS1, FSUB P1
565 / JGT PLS2 / BOTH PLOTTER TYPES
566 FLDA INX80X
567 FSTA #XINCX / X80 SP PRINTER PLOTTER
568 FLDA INX80Y
569 FSTA #XINCY
570 TRAP3 #WRITO
571 JA UNIX80
572 JA FORM2 / ' [STP6'/' MC1'/' P 0 0'
573 TRAP3 #RENDO
574 MACHIN,
575 FLDA% ARG1
576 JEQ EIGHTE
577 FLDA P22 / SET MATCHTP TO 22 IF NON-8/E
578 EIGHTE, SETX #XCHTP
579 ATX 0 / 0=8/E, 022=12,8/I,8/L
580 XTA 0
581 SETX #XCHCK / FOR INITIALISATION CHECK
582 ATX 0
583 SETX XRPLOT
584 TRAP4 #XNTST
585 FLDA P1
586 FSTA #XFCTX / FACTOR=1 INITIALLY
587 FSTA #XFCTY
588 FCLA
589 FSTA #XOLDP / AND REALLY MOVE IT!
590 FSTA #XPENC / SO WILL DO FIRST PEN MOVEMENT
591 FSTA #XXOLD
592 FSTA #XYOLD
593 FSTA #XORGX
594 FSTA #XORGY
595 FSTA PORS
596 JA PLTRTN
597 ENTRY PLEXIT / BE SHURE ALL DONE
598 WB4, TEXT 'PLEXIT'
599 PLEXIT,
600 FLDA# WB4
601 FSTA WBW
602 JSA PLTSTR
603 STARTF
604 TRAP3 #WRITO
605 JA UNIX80
606 JA FORM3
607 TRAP3 #RENDO
608 TRAP3 #REW / OUTPUT REMAINDER OF BUFFER AND RESET OUTPUT (NOT GOOD FOR FILE STRUCTURED DEVICES!!!!!)
609 / TRAP4 #XDNCK
610 JA PLTRTN
611 \f SECT #SYMBL
612 EXTERN SIN
613 EXTERN COS
614 EXTERN #XMBTB / HERE STARTS THE SYMBOL TABLE
615 /
616 / EXTERNAL REFERENCES INTO FIELD 1 (PDPPLT)
617 /
618 EXTERN #XTXAD
619 EXTERN #XLTCD
620 EXTERN #XPNOP
621 EXTERN #XLEFT
622 EXTERN #XRGHT
623 EXTERN #XNDLF
624 EXTERN #XNDRT
625 EXTERN #XPSNM
626 EXTERN #XPSIN
627 /
628 /
629 ENTRY SYMBOL
630 WB5, TEXT 'SYMBOL'
631 SYMBOL,
632 FLDA# WB5
633 FSTA WBW
634 JSA PLTSTR
635 JSR #XMBTB / LOAD THE SYMBOL TABLE ( SYMBTB )
636 SYM1, FLDA% ARG1,1
637 FSTA XPT / X POINT
638 FLDA% ARG1,1+
639 FSTA YPT / Y VALUE
640 FLDA% ARG1,1+
641 FSTA YDIFF / HEIGHT
642 FLDA% ARG1,1+
643 FSTA TERM1 / TEXT
644 FLDA% ARG1,1+
645 FSTA TERM2 / ANGLE
646 FLDA% ARG1,1+
647 FSTA ARG1 / NUMBER CHARS.
648 STARTF
649 FLDA% TERM2
650 FMUL DEGRAD / CONVERT TO RADIANS
651 FSTA XCHRPT / THEN DONT NEED SIND
652 FLDA% XPT
653 FSTA COSANG / VALUE OF X
654 FSUB F999 / IF X NEQ 999 THEN
655 JNE SY0 / WE USE THE X VALUE SPECIFIED ELSE
656 FLDA #XXOLD / WE START WITH THE OLD VALUE
657 FMUL #XINCX / THIS WILL CAUSE SOME TRUNCATION ERROR
658 FDIV #XFCTX / IN XYPLOT ROUTINE BUT THE ERROR IS SMALL
659 FSTA COSANG / AND WE HOPE FAC > 0 BUT THIS MUST NOT BE SO!
660 SY0,
661 FLDA% YPT
662 FSTA SINANG
663 FSUB F999 / IF Y NEQ 999 THEN
664 JNE SY1 / WE USE THE Y VALUE SPECIFIED ELSE
665 FLDA #XYOLD / WE START WITH THE OLD Y VALUE
666 FMUL #XINCY / THIS CAUSES SOME TRUNCATION ERRORS
667 FDIV #XFCTY
668 FSTA SINANG
669 SY1,
670 FCLA
671 FSTA #XTXAD
672 FSTA #XPENC / SO ALWAYS DOES INITIAL PEN U/D
673 FSTA CENTSY
674 FLDA TERM1 / GET TEXT ADDRESS
675 FSTA #XTXAD / PUT IT DOWN IN PDP PART
676 \f FLDA% YDIFF / ASSUME ITS A REGULAR
677 JGE NOTNEG / NEGATIVE SIZE IS NOT NICE
678 FNEG
679 NOTNEG, FDIV PF7 / ADJUST LATER IF A CENT
680 FSTA ANGADJ
681 FLDA% ARG1 / SHOWNS NUM. CHARS + PEN STATUS
682 FSTA NUMSYM
683 JGE REGSYM / GT OR =0 IS REG SYM
684 FLDA% TERM1 / CHECK FOR REG CHAR PASSED
685 FSUB F100 / AS AN INTEGER EQUIV.
686 JLT INTEQ / ITS A INTEGER EQUIV
687 FLDA% YDIFF / CENTERED SYMBOL
688 JGE NOTNG1
689 FNEG
690 NOTNG1, FDIV P4
691 FSTA ANGADJ
692 FLDA NUMSYM / -1=PEN UP, -2=PEN DOWN (CNTRD ONLY)
693 FADD P1
694 JGE UPPEN / MOVE WITH PEN UP
695 FSTA CENTSY / NEG MEANS DOWN FROM THE START
696 PTITON, FLDA PF2
697 CPEN, FSTA YCHRPT / =-2 FOR DOWN (CENT. + INTEQ ONLY)
698 / -3 FOR UP FOR ALL SYMBOLS + INTEQ
699 JSA SYMSTR / PLOT ORIGIN
700 JA .+10
701 JA COSANG
702 JA SINANG
703 JA YCHRPT
704 FLDA XPT
705 FMUL #XFCTX
706 FSTA XREAL / KEEP TRACK OF PASSED VALUES
707 FLDA YPT
708 FMUL #XFCTY
709 FSTA YREAL
710 JSA PENUP
711 FLDA CENTSY
712 JLE PENOK
713 JSA PNDOWN / PUT PEN DOWN NOW (CENT ONLY)
714 PENOK, JSR SIN
715 JA .+4
716 JA XCHRPT
717 FMUL ANGADJ
718 FSTA SINANG / SAVE SIN+HGT, USE FOR ALL VALUES
719 JSR COS
720 JA .+4
721 JA XCHRPT
722 FMUL ANGADJ
723 FSTA COSANG / COS(ANGLE)+HGT (IN INCREMENTS NOW)
724 LDX 0,4 / ZERO STEP COUNT
725 FLDA NUMENT
726 JGT NUM2 / JUMP IF FROM NUMBER
727 JA FSTLFT
728 UPPEN, FLDA P3 /
729 FSTA CENTSY / PUT PEN DOWN AFTER INITIAL MOVE
730 JA CPEN / MOVE WITH PEN UP
731 \fPENSET, JSA PNDOWN
732 ONEXY, JA .
733 SETX #XLTCD
734 XTA 2 / SET Y
735 FSTA YCHRPT
736 XTA 1 / GET X
737 FSTA XCHRPT / GET FIRST MOVE
738 SETX XRPLOT
739 FSUB PF7 / 7,0=PEN UP, 7,7=END
740 JEQ PENUPM
741 FLDA CENTSY
742 JEQ CALALL / CENTEREDS REQUIRE MODIFIED ORIGIN
743 FLDA PF2
744 FNEG
745 FADDM XCHRPT
746 FADDM YCHRPT
747 CALALL, JSA CALANG
748 JXN PENSET,5 / PUT PEN BACK DOWN IF NEG
749 JA ONEXY
750 INTEQ, FLDA NUMSYM / CHECK ON PEN
751 FADD P1
752 JLT PTITON
753 REGSYM, FLDA P3
754 JA CPEN
755 PENUPM, JSA PENUP
756 FLDA YCHRPT / CHECK FOR 7,7 END
757 FSUB PF7
758 JEQ NXTCHR / JUMP IF END OF CHARACTER
759 JA ONEXY / ON TO NEXT PAIR
760 PENUP, JA .
761 LDX 1,5 / SET FOR PEN UP
762 SETX #XDPXR
763 LDX 0,0 / PASS A ZERO FOR UP
764 SETX XRPLOT
765 / TRAP4 #XPNOP
766 FLDA# SDP / 'P' PEN UP
767 FSTA SYMPEN
768 JA PENUP
769 PNDOWN, JA .
770 SETX #XDPXR
771 LDX 1,0 / PASS A ONE FOR DOWN
772 SETX XRPLOT
773 / TRAP4 #XPNOP
774 FLDA# SDK / 'K' PEN DOWN
775 FSTA SYMPEN
776 LDX 0,5
777 JA PNDOWN
778 \fSYMPEN, F 0.0
779 CALANG, JA .
780 FLDA YCHRPT
781 FDIV #XINCY
782 FSTA YCHRPT / Y MOVE AS STEPS (UNITERGERIZED)
783 FMUL SINANG
784 FNEG
785 FSTA TERM1 / =-SINA*Y
786 FLDA XCHRPT
787 FDIV #XINCX
788 FSTA XCHRPT
789 FMUL COSANG
790 FADD TERM1
791 FMUL #XFCTX
792 JSA MAKINT
793 FSTA XACT / FOR AT END OF TEXT
794 FSTA XPT / X*COSA+OLDX-SINA*Y
795 / REQUIRES AN OLDX+OLDY TERM, BUT I DO THIS ALL REL TO A
796 / LOGICAL 0,0 FOR EACH CHAR, SO I #XLEFT THEM OUT.
797 FLDA YCHRPT
798 FMUL COSANG
799 FSTA TERM1 / COSA*Y
800 FLDA XCHRPT
801 FMUL SINANG
802 FADD TERM1
803 FMUL #XFCTY
804 JSA MAKINT
805 FSTA YACT
806 FSTA YPT / NEWX*SINA*OLDY*COSA*Y
807 FLDA P1
808 FSTA #XPENC / USE SAME ORIGIN THROUOUT THE LETTER
809 FNEG
810 FSTA PORS
811 / JSA PREREL / PEN MUST BE IN NEC POS BY NOW
812 TRAP3 #WRITO
813 JA UNIX80
814 JA FORM1
815 FLDA SYMPEN
816 TRAP3 #RSVO
817 FLDA YREAL
818 FDIV #XFCTY
819 FADD YPT
820 FADD #XORGY
821 TRAP3 #RSVO
822 FLDA XREAL
823 FDIV #XFCTX
824 FADD XPT
825 FADD #XORGX
826 FNEG
827 TRAP3 #RSVO
828 TRAP3 #RENDO
829 JA CALANG
830 \fLEFTJS, XTA 4 / NUM OF MOVES
831 SETX #XLTCD
832 ATX 0 / PASS NUMBER OF STEPS INTO LETTER
833 SETX XRPLOT
834 TRAP4 #XLEFT / RETURN WITH A X,Y PAIR
835 JSA ONEXY
836 XTA 4
837 SETX #XLTCD
838 ATX 0 / STEP COUNT
839 SETX XRPLOT
840 JNE NOTFST / CHANGE IF BEFORE FIRST MOVE OF CHARACTER
841 JSA PNDOWN / PUT PEN DOWN NOW
842 NOTFST, TRAP4 #XRGHT / SET NEXT XY PAIR
843 JSA ONEXY
844 ADDX 1,4 / UPDATE COUNT
845 JA LEFTJS / 77 AT END OF CHAR USED TO DET END
846 \fCENTEX, JSA PENUP
847 JA CENTOO
848 NXTCHR, FLDA CENTSY
849 JNE CENTEX / LEAVE PEN AT CENTER FOR CENTS ONLY
850 FSTA YCHRPT
851 FLDA PF7
852 FSTA XCHRPT / MOVE PEN TO 7,0 FOR REG CHARS
853 JSA CALANG / PLOT IT
854 FLDA XACT / UPDATE COLLECTIVE ENDING X VALUE
855 FMUL #XFCTX / WITH EFFECT OF FACTOR
856 FADDM XREAL / ALSO WITH EFFECT OF FACTOR
857 FLDA YACT / UPDATE COLLECTIVE ENDING Y VALUE
858 FMUL #XFCTY / WITH EFFECT OF FACTOR
859 FADDM YREAL
860 CENTOO, LDX 0,4 / ZERO STEP NUM WITHIN CHAR
861 FCLA
862 FSTA #XXOLD
863 FSTA #XYOLD
864 FLDA P1
865 FNEG
866 FADD NUMSYM / UPDATE COUNTER
867 JLE SYMDON / NO MORE
868 FSTA NUMSYM / MORE, SAVE COUNT
869 FLDA NUMENT
870 JGT NUM3 / EXIT FOR NUM SUBR
871 FCLA
872 JXN RTCHAR,3 / 1=CHAR IS #XRGHT SIX BITS
873 FSTLFT, LDX 1,3 / POINT TO #XRGHT 6 WHEN TIME FOR NEXT CHAR
874 FLDA NUMSYM
875 JLT NUM5 / JUMP IF CENTERED SYM OR INTEQ
876 / CENTEREDS + INTEQ EQUIV PASSING 3 WORD VALUE IN NUM5
877 / REG SYM USES PDP ROUTINE TO GET ONE WORD OF LIST
878 FCLA
879 TRAP4 #XNDLF
880 JA LEFTJS / GO PLOT THE ACTUAL CHAR
881 RTCHAR, LDX 0,3 / POINT TO #XLEFT 6 BITS FOR NEXT TIME
882 TRAP4 #XNDRT
883 JA LEFTJS
884 SYMDON, FCLA
885 FSTA PORS
886 FSTA NUMENT
887 FLDA XREAL / UPDATES ORG X VALUE
888 FDIV #XFCTX
889 JSA MAKINT
890 FSTA #XXOLD
891 FLDA YREAL / UPDATES ORG Y VALUE
892 FDIV #XFCTY
893 JSA MAKINT
894 FSTA #XYOLD
895 JA PLTRTN / NOW CAN CONTINUE PLOT FROM HERE
896 \f/ SPECIAL ENTRY FOR NUMBER SUBROUTINE
897 ENTRY SYMB
898 WB6, TEXT 'SYMB '
899 SYMB,
900 FLDA# WB6
901 FSTA WBW
902 JSA PLTSTR / SPECIAL ENTRY FOR NUMBER SUBROUTINE
903 JSR #XMBTB / LOAD THE SYMBOL TABLE (SYMBTB)
904 STARTF
905 FLDA P1
906 FSTA NUMENT
907 STARTD
908 JA SYM1
909 NUM2, SETX NUMENT / FOR NUMBER SUBROUTINE ONLY
910 / HERE ONLY FOR FIRST NUMBER OF STRING
911 LDX -1,2
912 NUM3, JSA GETARG / FOR SECOND AND LATER NUMBERS
913 TRAP4 #XPSNM
914 JA LEFTJS
915 NUM5, SETX NUMENT / FOR INTEQ + CENETEREDS
916 LDX -1,2
917 JSA GETARG
918 TRAP4 #XPSIN
919 JA LEFTJS
920 GETARG, JA .
921 SETX NUMENT / USED FOR MORE THAN ONE CHARACTER
922 STARTD
923 FLDA #XTXAD+1 / CENTEREDS SYMBOLS AND NUM SUBROUTINE
924 / PASS VALUES AS THREE WORDS
925 FSTA ARG1
926 STARTF
927 FLDA% ARG1,2+ / PASS A NUMBER
928 SETX #XTXAD
929 JSA MAKINT
930 ATX 0
931 SETX XRPLOT
932 JA GETARG
933 END
934
935 \1a